after a lot googeling and searching through stackoverflow i decided i need your help.
I have to get the quantity of supplies for each supply by a certain supplier. I know that sounds weird but let me explain:
I have a Supplier model wich has many supplies and each supply has many stocks wich have a quantity. So now im building a view in wich i want to represent each Supply with their quantity on a certain supplier.
So thats what I came up with in my controller:
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']);
}
}
}
So im iterating over my suppliers and iterate again over the supplies from each of them. Now I want to fill the collection I want as a result.
If this collection not contains a supply with the name of "$supply->name", I push an array with the supply-name and create an array "suppliers" in which I also set the first entry with the current supplier information.
Now we are getting close to my problem.
If comp_supply already contains a supply with the current supply-name, if have to push the new supplier into the already existing "supplier" array we created in the first "if".
Therefore I created $array, which holds the new supplier-informations, and $array2, which holds the supplier-array ($comp_supplies->where('name', $supply->name)->first()['supplier']) we already made.
Now, if i push $array onto $array2 and dd(array2) everything works as i want it to. But if I now set
$comp_supplies->where('name', $supply->name)->first()['supplier'] = $array2
and then
dd($comp_supplies->where('name', $supply->name)->first()['supplier']);
it didnt change.
Im stuck on this Problem for nearly 2h and getting really frustrated.
Please if anyone has an idea what I could do to solve this, or knows where i can look next, let me know.
Here are also the migrations:
Supplier:
public function up()
{
Schema::create('suppliers', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->unsignedInteger('coordinates_id')->index()->nullable();
$table->timestamps();
});
}
Supplies:
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();
});
}
Stocks:
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();
});
}
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire