Laravel принадлежит (более 1 таблицы) - PullRequest
0 голосов
/ 18 января 2020
У

есть ладья ie в laravel Мне не очень хорошо, где и как это сделать.

У меня есть 3 таблицы, которые имеют почти одинаковые поля, но все они в общем ID

public function book(){

     return $this->belongsTo('App\Models\table1', 'book_id', 'id');
}

это работает, но я могу сделать что-то подобное ?? Что я должен использовать?

 public function book(){

     return $this->belongsTo('App\Models\table1','App\Models\table2', 'book_id', 'id');
}

Спасибо, что поделились своими знаниями.

Ответы [ 2 ]

2 голосов
/ 18 января 2020

Нет, вы не можете таким образом создать одну связь с двумя таблицами, это не тот способ, которым Laravel читает метод.

Это было бы довольно просто и, вероятно, наиболее понятно для читабельности кода просто сделать две отдельные взаимосвязи:

public function book(){

  return $this->belongsTo('App\Models\table1', 'foreign_key');
}

public function otherBook(){

 return $this->belongsTo('App\Models\table2', 'foreign_key');
}

Но, может быть, стоит потратить время на то, чтобы сначала рассмотреть общую архитектуру ваших моделей и таблиц. Если у этих таблиц общий идентификатор, со временем это может привести к путанице и потребует много накладных расходов, чтобы избежать перезаписи. Почему бы просто не составить одну таблицу с каким-нибудь флагом, чтобы определить разные типы книг?

Надеюсь, это поможет.

2 голосов
/ 18 января 2020

Вы можете определить 2 отдельных функции принадлежащих для

//...
public function book(){
   return $this->belongsTo('App\Book', 'foreign_key', 'primary_key');
}

public function author(){
   return $this->belongsTo('App\Author', 'foreign_key', 'primary_key');
}
//...
...