在 Laravel 集合对象中添加新元素

我想在 $items数组中添加新元素,由于某些原因我不想使用连接。

$items = DB::select(DB::raw('SELECT * FROM items WHERE items.id = '.$id.'  ;'));
foreach($items as $item){
$product = DB::select(DB::raw(' select * from product
where product_id = '. $id.';' ));


$item->push($product);
}

我该怎么办?

246364 次浏览

It looks like you have everything correct according to Laravel docs, but you have a typo

$item->push($product);

Should be

$items->push($product);

push method appends an item to the end of the collection:

I also want to think the actual method you're looking for is put

$items->put('products', $product);

put method sets the given key and value in the collection

As mentioned above if you wish to add as a new element your queried collection you can use:

    $items = DB::select(DB::raw('SELECT * FROM items WHERE items.id = '.$id.'  ;'));
foreach($items as $item){
$product = DB::select(DB::raw(' select * from product
where product_id = '. $id.';' ));


$items->push($product);
// or
// $items->put('products', $product);
}

but if you wish to add new element to each queried element you need to do like:

    $items = DB::select(DB::raw('SELECT * FROM items WHERE items.id = '.$id.'  ;'));
foreach($items as $item){
$product = DB::select(DB::raw(' select * from product
where product_id = '. $id.';' ));
    

$item->add_whatever_element_you_want = $product;
}

add_whatever_element_you_want can be whatever you wish that your element is named (like product for example).

I have solved this if you are using array called for 2 tables. Example you have, $tableA['yellow'] and $tableA['blue'] . You are getting these 2 values and you want to add another element inside them to separate them by their type.

foreach ($tableA['yellow'] as $value) {
$value->type = 'YELLOW';  //you are adding new element named 'type'
}


foreach ($tableA['blue'] as $value) {
$value->type = 'BLUE';  //you are adding new element named 'type'
}

So, both of the tables value will have new element called type.

If you want to add item to the beginning of the collection you can use prepend:

$item->prepend($product, 'key');

If you want to add a product into the array you can use:

$item['product'] = $product;

This is what i would do...

$items = Item::find($id);
foreach($items as $item){
$product = Product::find($id);
$item->product = $product;
}

This would assign $product to each $item