красноречивый получить только первый активный запрос - PullRequest
2 голосов
/ 22 февраля 2020

Эй, ребята, у меня запутанный вопрос

У меня есть 3 таблицы

  1. basket_lists (тележки)
  2. basket_items (carts_item)
  3. продукты

с этим переносом

 'basket_lists':
        $table->bigIncrements('id');
        $table->unsignedBigInteger('user_id');
        $table->boolean('active');
        $table->timestamps();


    basket_items:
        $table->bigIncrements('id');
        $table->unsignedBigInteger('product_Id');
        $table->unsignedBigInteger('basket_list_id');
        $table->timestamps();


       products:
        $table->bigIncrements('id');
        $table->string('title');
        $table->text('description');
        $table->bigInteger('amount');
        $table->timestamps();

У меня есть некоторые продукты в моей таблице, когда я ищу (запрос) {

BasketList::where('active', '=', 1)->with('basketItems.products')->get();

, это только дает мне первый список корзин продуктов (где id = 1), если я вставлю новый список корзин и установите первый список корзин в (active = 0), а второй в (active = 1), он не будет показывать никаких продуктов.

Вот мой Модельные классы:

class BasketList extends Model
{
    public function basketItems()
    {
        return $this->hasMany(BasketItem::class ,'basket_list_id' );
    }
}

class BasketItem extends Model
{
    public function products()
    {
        return $this->hasMany(Product::class,'id' );
    }


    public function basketList()
    {
        return $this->belongsTo(BasketList::class);
    }

}


public function basketItem() 
{
    return $this->belongsTo(BasketItem::class ,'product_id');
}

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

Вы должны изменить свои отношения на ownTo ()

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

    class BasketItem extends Model
    {
        //
        protected $table = 'basket_items';


        public function product()
        {
                return $this->belongsTo(Product::class, 'product_id','id' ); // Watch out for the case sensitive. how did you wright product_id in your migration. (product_id or product_Id)
        }
0 голосов
/ 22 февраля 2020

Вы нарушаете Laravel соглашения о присвоении имен по умолчанию для внешних ключей 'product_ I d'

Это должно быть 'product_id'

Eloquent определяет внешние ключ отношения, основанный на названии модели. В этом случае автоматически предполагается, что модель BasketItem имеет внешний ключ 'product_id'. Если вы хотите sh переопределить это соглашение, вы можете передать второй аргумент методу hasMany:

Fix

App \ BasketItem. php

public function product()
{
    return $this->belongsTo(Product::class, 'product_Id','id' );
}

Чек Документация

Использование

BasketList::where('active', '=', 1)->with('basketItems', 'basketItems.product')->get();
...