после долгих поисков и поиска в стеке, я решил, что мне нужна ваша помощь.
Мне нужно получить количество расходных материалов для каждого поставщика от определенного поставщика.Я знаю, это звучит странно, но позвольте мне объяснить:
У меня есть модель Поставщика, у которой много поставок, и у каждой поставки есть много запасов, у которых есть количество.Так что теперь я строю представление, в котором я хочу представить каждому Поставщику их количество по определенному поставщику.
Так вот, что я придумал в своем контроллере:
foreach ($suppliers as $supplier) {
foreach($supplier->supplies as $supply){
if(!$comp_supplies->contains('name', $supply->name)){
$comp_supplies->push(['name'=>$supply->name, 'supplier'=>[['name'=> $supplier->name, 'quantity' => $supply->stocks->first()->quantity]]]);
}elseif($comp_supplies->contains('name', $supply->name)){
$array = (['name'=> $supplier->name, 'quantity' => $supply->stocks->first()->quantity]);
$array2 = $comp_supplies->where('name', $supply->name)->first()['supplier'];
array_push($array2, $array);
//dd($array2);
$comp_supplies->where('name', $supply->name)->first()['supplier'] = $array2;
dd($comp_supplies->where('name', $supply->name)->first()['supplier']);
}
}
}
Итак, яперебираю моих поставщиков и снова перебираю поставки от каждого из них.Теперь я хочу заполнить коллекцию, которую я хочу в результате.
Если эта коллекция не содержит поставки с именем «$ supply-> name», я помещаю массив с именем supply-name и создаю массив «поставщики», в котором я также устанавливаю первую запись с помощьютекущая информация о поставщике.
Теперь мы приближаемся к моей проблеме.
Если comp_supply уже содержит поставку с текущим именем поставки, если придется вытолкнуть нового поставщика в уже существующую«поставщик» массив, который мы создали в первом «если».
Поэтому я создал $ массив, который содержит информацию о новом поставщике, и $ array2, который содержит массив поставщика ($ comp_supplies-> где ('name', $ supply-> name) -> first () ['supplier']) мы уже сделали.
Теперь, если я помещу $ array в $ array2 и dd (массив2) все работает как я хочу.Но если я сейчас установлю
$comp_supplies->where('name', $supply->name)->first()['supplier'] = $array2
, а затем
dd($comp_supplies->where('name', $supply->name)->first()['supplier']);
, то это не изменится.
Я застрял в этой проблеме почти на 2 часа и очень расстроился.
Пожалуйста, если у кого-нибудь есть идея, что я мог бы сделать, чтобы решить эту проблему, или знаете, где я могу посмотреть дальше, дайте мне знать.
Вот также миграции:
Поставщик:
public function up()
{
Schema::create('suppliers', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->unsignedInteger('coordinates_id')->index()->nullable();
$table->timestamps();
});
}
Расходные материалы:
public function up()
{
Schema::create('supplies', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->unsignedInteger('supplier_id');
$table->foreign('supplier_id')
->references('id')
->on('suppliers')
->onDelete('cascade');
$table->timestamps();
});
}
Акции:
public function up()
{
Schema::create('stocks', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('supplies_id');
$table->foreign('supplies_id')
->references('id')
->on('supplies')
->onDelete('cascade');
$table->integer('quantity');
$table->timestamps();
});
}