как получить доступ к данным таблицы с двумя внешними ключами в laravel - PullRequest
0 голосов
/ 15 января 2020

У меня есть таблица с именем order_details, в которой есть два внешних ключа. (1.) order_id (2.) product_id

Я сжал всю таблицу, на мой взгляд. когда я получаю доступ к записям, относящимся к заказу, они работают хорошо, но когда я пытаюсь получить доступ к записи продуктов, которые являются чужими как product_id в таблице order_detail, я получаю нулевое значение.

Таблица OrderDetails:

Schema::create('order_details', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('order_id');
            $table->foreign('order_id')->references('id')->on('orders');
            $table->unsignedBigInteger('product_id');
            $table->foreign('product_id')->references('id')->on('products');
            $table->integer('quantity');
            $table->integer('amount');

            $table->timestamps();
        });

Модель OrderDetail:

 public function order(){
        return $this->belongsTo(Order::class);
    }
    public function products(){
        return $this->hasMany(Product::class);
    }

Модель заказа:

 public function orderDetails(){
        return $this->hasMany(OrderDetail::class);
    }

Модель товара:

 public function orderDetail(){
        return $this->belongsTo(OrderDetail::class);
    }

Я сжал всю таблицу в $ orderDetails на мой взгляд. когда я пытаюсь получить доступ к данным таблицы Order следующим образом:

$orderDetails[0]->Order['total_ammount']

работает нормально, так как обращается к модели заказа через order_id. но таким же образом я пытаюсь получить данные из модели продукта, используя product_id, как это

$orderDetails[0]->Product['name']

, которое показывает мне, что нет ошибки, но ноль.

1 Ответ

0 голосов
/ 15 января 2020

Можете ли вы попытаться исправить эти отношения

Модель OrderDetail

// individual row of order_details belongs to single product
public function product(){
    return $this->belongsTo(Product::class);
}

Модель продукта для OrderDetail

Не думаю, что это отношение потребуется, поскольку пройти через модель пользователя. Даже если исправить это как

public function orderDetails() {
    return $this->hasMany(OrderDetail::class);
}
...