Issue
I am unable to fetch the product name according to matching id but i am getting same name in table as shown below this is the ordered list of products
Please check table for reference ill be showing below (order_list table)
Table products
My Controller
public function details($id)
{
$orders = Order_model::find($id);
$Order_lists = Order_list::orderBy('id', 'asc')->where('user_id', '=', Auth::user()->id)->where('order_id', '=', $id)->get();
foreach($Order_lists as $order_list)
{
$prod_name = DB::table("products")->where('id', $order_list->product_id)->value('name');
}
$address = DB::table("delivery_address")->where('user_id', '=', Auth::user()->id)->get();
if(Auth::user()->role == 'customer')
{
return view('customer.orders.details',['Order_lists' => $Order_lists, 'orders' => $orders, 'address' => $address, 'prod_name' => $prod_name]);
}
}
please Help me out as i am at learning stage and any help would be glad to hear thanks.
Solution
the problem is $prod_name is a single variable and you running it in loop. so it only replace every iteration and just get last iteration name. so if you want get every product name with $order_list , you can easily create Model for products table. then create one to one Order_list. eg:
https://laravel.com/docs/7.x/eloquent-relationships#one-to-one
class Order_list extends Model
{
public function products()
{
return $this->hasOne('App\Products',"product_id"); //your model name and path
}
}
then you can get all order list data with product like this:
$Order_lists = Order_list::orderBy('id', 'asc')->where('user_id', '=', Auth::user()->id)->where('order_id', '=', $id)->with('products')->get();
product details should in $Order_lists[0]->products->name
edit: to run this in blade file
@foreach($Order_lists as $Order_list)
////other <td>s
<td>{{$Order_list->products->name}}</td>
@endforeach
if above method is complex you can create separate array to name
$prod_name =[];
foreach($Order_lists as $order_list)
{
$prod_name[$order_list->product_id] = DB::table("products")->where('id', $order_list->product_id)->value('name');
}
then read it on blade file like this:
{{$prod_name[$order_list->product_id]}}
edit: to print elements in second method you can use blade syntax. first send veriables to .blade file eg: view('your.blade.php,compact('Order_lists','prod_name'));
//then print in .blade file
@foreach($Order_lists as $Order_list)
////other <td>s
<td>{{$prod_name[$order_list->product_id]}}</td>
@endforeach
Answered By - Viduranga Answer Checked By - Gilberto Lyons (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.