красноречивые отношения в laravel не работают для нескольких строк

#laravel

#laravel

Вопрос:

Таблица: купоны
введите описание изображения здесь

Таблица shop_category:

введите описание изображения здесь

Модель купона:

 use Model;
/**
 * Model
 */
class Coupon extends Model
{


    /**
     * @var string The database table used by the model.
     */
    public $table = 'coupons';

    /**
     * @var array Validation rules
     */
    public $rules = [
    ];
    public $belongsTo  = [
        'category' => ['ItScholarBdApiModelsCategory','key' => 'id']
    ];

}
  

Модель категории:

 use Model;
use Lang;

/**
 * Model
 */
class Category extends Model
{
    public $implement = ['@RainLab.Translate.Behaviors.TranslatableModel'];
    public $translatable = ['name'];

    /**
     * @var string The database table used by the model.
     */
    public $table = 'shop_category';

    /**
     * @var array Validation rules
     */
    public $rules = [
    ];
    public $attachOne = [
      'icon' => 'SystemModelsFile'
    ];
}
  

Теперь я хочу получить купоны с категорией следующим образом:

  $records    =   ItScholarBdapiModelsCoupon::with(['category']);
  

Но когда я печатаю записи следующим образом:

 echo '<pre>';print_r($records->toArray()); exit;
  

Это показывает:

 Array
(
    [0] => Array
        (
            [id] => 4
            [code] => FEAST50
            [discount] => 2
            [validity] => 2020-11-17 23:59:59
            [min_order] => 40
            [shop_category_id] => 1
            [created_at] => 2020-11-07 17:13:40
            [updated_at] => 2020-11-07 17:13:40
            [category] => 
        )

    [1] => Array
        (
            [id] => 1
            [code] => FEAST50
            [discount] => 2
            [validity] => 2020-11-17 23:59:59
            [min_order] => 40
            [shop_category_id] => 1
            [created_at] => 2020-11-07 17:13:40
            [updated_at] => 2020-11-07 17:13:40
            [category] => Array
                (
                    [id] => 1
                    [name] => Shopping
                    [created_at] => 2020-10-20 16:05:05
                    [updated_at] => 2020-10-20 16:05:05
                )

        )

)
  

Почему индекс ‘category’ первого элемента пуст, поскольку две строки таблицы coupons идентичны? Я изо всех сил пытаюсь найти ошибку, но безуспешно. Какие-либо подсказки?

Комментарии:

1. Что такое внешний ключ в модели купона?

2. shop_category_id

3. Что произойдет, если вы добавите новую строку?

4. Новый raw добавляется нормально.

5. Это может произойти из-за несоответствия данных. Я предлагаю вам удалить обе записи, затем вставить новые строки и повторить попытку

Ответ №1:

 public function category(){

        return $this->belongsTo(Category::class,'shop_category_id','id');

    }
  

Привет в модели

 public function coupon(){

        return $this->hasMany(Coupon::class);

    }
  

вы можете вызвать категорию

 $coupons = Coupon::with('category')->get();