laravel 5 reletionship имеет много в двух столбцах

#mysql #laravel #laravel-4 #laravel-5 #laravel-5.2

#mysql #laravel #laravel-4 #laravel-5 #laravel-5.2

Вопрос:

Я пытаюсь реализовать взаимосвязь для двух столбцов: record_id и table_name,

вот что я получил до сих пор, название модели BatteryAssets:

 public function Attachments()
    {
       return $this->hasMany('AppAttachments','record_id','id')->where('tabel_name','`battery_assets`');
    }
  

пожалуйста, обратите внимание, что ‘battery_asstes’ — это строка, поэтому она не динамическая, я пытаюсь сделать ее в виде строки, но получаю следующую ошибку :

 QueryException in Connection.php line 761:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tabel_name' in 'where clause' (SQL: select * from `attachments` where `attachments`.`record_id` = 1 and `attachments`.`record_id` is not null and `tabel_name` = `battery_assets`)
  

как вы видите, я пытался поместить battery_assets в `, а также я пытался заключить их в двойные кавычки » «battery_assets» «, а также без кавычек

а также, пожалуйста, обратите внимание, что в таблице BatteryAssets нет столбца имя_таблицы, я хочу использовать его только как статическое значение в предложении where, также я пытался сделать

 ->where('attachments.tabel_name','"battery_assets"');
  

но это дает ту же ошибку

Ответ №1:

Ошибка гласит, что столбец не найден, имя столбца, которое вы пытаетесь «вызвать», называется «tabel_name». Вы уверены, что имя столбца не ‘имя_таблицы’? (таблица на английском, а не на голландском, по крайней мере, я думаю, что вы голландец)

Так и должно быть:

 public function Attachments()
    {
       return $this->hasMany('AppAttachments','record_id','id')->where('table_name','`battery_assets`');
    }
  

Если ваш столбец называется ‘tabel_name’ в вашей базе данных. Я бы рекомендовал использовать английское именование, поскольку «name» — английское.

Ответ №2:

Произошла опечатка, теперь все работает:

 public function Attachments()
    {
       return $this->hasMany('AppAttachments','record_id','id')->where('table_name','battery_assets');
    }