Как получить название продукта из таблицы заказов, содержащей product_id в laravel? - PullRequest
1 голос
/ 16 апреля 2020

Мне не удается получить название продукта в соответствии с соответствующим идентификатором, но я получаю то же имя в таблице, как показано ниже это упорядоченный список продуктов

Пожалуйста, проверьте таблицу для справки ниже будет отображаться (таблица заказов)

таблица заказов

Таблица продуктов

таблица продуктов

Мой контроллер

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]);
    }

}

Пожалуйста, помогите мне, так как я на этапе обучения, и любая помощь будет рада услышать спасибо.

1 Ответ

0 голосов
/ 16 апреля 2020

проблема в том, что $ prod_name - это отдельная переменная, и вы запускаете ее в l oop. поэтому он заменяет только каждую итерацию и просто получает имя последней итерации. так что если вы хотите получить каждое название продукта с помощью $ order_list, вы можете легко создать модель для таблицы продуктов. затем создайте один к одному Order_list. Например:

https://laravel.com/docs/7.x/eloquent-relationships#one -в-один

class Order_list extends Model
{

    public function products()
    {
        return $this->hasOne('App\Products',"product_id");  //your model name and path
    }
}

, тогда вы можете получить все данные списка заказов с таким продуктом:

$Order_lists = Order_list::orderBy('id', 'asc')->where('user_id', '=', Auth::user()->id)->where('order_id', '=', $id)->with('products')->get();

сведения о продукте должны быть в $Order_lists[0]->products->name

отредактированы: чтобы запустить это в блейд-файле

@foreach($Order_lists as $Order_list)
////other <td>s

    <td>{{$Order_list->products->name}}</td>


@endforeach

если описанный выше метод сложен, вы можете создать отдельный массив с именем

 $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');

    }

затем прочитайте его на блейд-файле следующим образом:

{{$prod_name[$order_list->product_id]}}
...