позволяет сказать, что у меня есть таблица orders
, которая будет иметь отношение «многие ко многим» к трем другим таблицам с именем typings
, translates
и theses
. Я знаю, что сводная таблица должна быть как-то вроде many to many polymorphic relation, но это не совсем то, что они ищут. Как мне выполнить сводную таблицу?Laravel: точка поворота таблицы для нескольких таблиц
ответ
Вы бы создать полиморфный отношения с заказами и трех других таблиц с помощью сводной таблицы с именем orderables
// TABLES NEEDED
orders
id - integer
typings
id - integer
translates
id - integer
theses
id - integer
orderables
order_id - integer
orderable_id - integer
orderable_type - string
// MODELS/RELATIONSHIPS NEEDED
class Typing extends Model
{
public function orders()
{
return $this->morphToMany('App\Order', 'orderable');
}
}
class Translate extends Model
{
public function orders()
{
return $this->morphToMany('App\Order', 'orderable');
}
}
class Thesis extends Model
{
public function orders()
{
return $this->morphToMany('App\Order', 'orderable');
}
}
class Order extends Model
{
public function typings()
{
return $this->morphedByMany('App\Typing', 'orderable');
}
public function translates()
{
return $this->morphedByMany('App\Translate', 'orderable');
}
public function theses()
{
return $this->morphedByMany('App\Thesis', 'orderable');
}
}
Тогда вы могли бы получить заказы модели, как это:
$thesis = Thesis::find(1);
$orders = $thesis->orders;
И обратное:
$order = Order::find(1);
$theses = $order->theses;
Спасибо, вы можете уточнить различия между 'morphMany',' morphToMany', 'morphByMany'? – alex
'morphMany' - это метод определения полиморфного отношения« один ко многим ». Например, 'like' - предположим, что у нас есть модель« Post »и модель« Comment », и пользователь также должен« любить ». Ну, пользователь может только «Походить» на почту один раз, но она тоже может «понравиться» комментарию. – swatkins
'morphToMany' и' morphByMany' определяют полиморфные отношения «многие-ко-многим». Например, «тег» - с использованием того же примера, что и выше, пользователь может «Отметить» сообщение «Почта» со многими тегами и может «Отметить» множество разных сообщений с теми же тегами. Она также может делать то же самое с «комментариями». – swatkins
Не много ли многополиморфно, что вы loo король для? Это и есть цель этого отношения. – swatkins
Хорошо, в отношении примера документации Laravel, пожалуйста, расскажите, как я могу получить доступ к связанным сообщениям через видео через много-много полиморфных и наоборот? и как насчет того, чтобы в дополнение к «посты» и «видео» была другая таблица с именем 'books'? – alex
Я добавил реализацию в качестве ответа. В примере Laravel - сообщения не связаны с видео - они могут делиться только общими тегами. В этом случае вы можете получить теги из сообщения, а затем перебирать те, которые извлекают видео из каждого тега. – swatkins