Laravel Eloquent генерирует неправильный запрос при активной загрузке - PullRequest
0 голосов
/ 30 мая 2018

У меня есть таблица базы данных, подобная этой:

id, title, description (NULL), parent_product_template_id (NULL)

У меня есть внешний ключ parent_product_template_id, который ссылается на столбец идентификатора из той же таблицы.

в контроллере я выполнил запрос:

$productTemplates = ProductTemplate::whereNull('parent_product_template_id')->get();

и сжимал результаты и передавал их в представление.

в представлении у меня есть этот цикл forelse:

@foreach($productTemplates as $productTemplate)
   $productTemplate->childs
@endforeach

, где модель ProductTemplate выглядит следующим образомthis.

class ProductTemplate extends Model
{
  public $timestamps = false;
  public function parent()
  {
    return $this->belongsTo('App\Models\ProductTemplate');
  }
  public function childs()
  {
    return $this->hasMany('App\Models\ProductTemplate');
  }
}

наконец, проблема в том, что при выполнении кода я получаю это сообщение об ошибке

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'product_templates.product_template_id' in 'where clause' (SQL: select * from `product_templates` where `product_templates`.`product_template_id` = 1 and `product_templates`.`product_template_id` is not null) (View: E:\wamp\www\SyriaShop\resources\views\admin\product-template\index.blade.php)

, почему и как он использовал такой странный ключ 'product_template_id' вместостолбец реального идентификатора

1 Ответ

0 голосов
/ 30 мая 2018

Если вы используете нестандартные внешние ключи в базе данных, вам необходимо явно указать их в отношении.

Определение внешних ключей в миграциях не исправляет красноречивые отношения.

public function parent()
{
    return $this->belongsTo('App\Models\ProductTemplate','parent_product_template_id','id');
}
...