Возможно ли/иметь право иметь отношение между таблицами, что идет только в одну сторону? У меня есть таблица invoices
, которой мне нужно ссылаться в других таблицах нравится commission_payments
и membership_payments
, но таблица invoices
не нужна commission_payment_id
или membership_payment_id
. Другими словами, существуют различные типы транзакций, которые могут произойти, и все они могут иметь счет-фактуру, но счет-фактура не требует ссылки на эти таблицы транзакций.Индивидуальные отношения, которые идут только в одном направлении в Laravel
invoices commission_payments membership_payments
--------------- --------------------- ---------------------
-id -id -id
... -invoice_id -invoice_id
... ...
Я создал яркие модели для каждой таблицы. Я добавил hasOne
отношение к invoices
на двух других моделях.
class CommissionPayment extends Model{
public function invoice(){
return $this->hasOne('App\Models\Invoice');
}
}
Затем я попробовал доступ к прилагаемую счет-фактуру на комиссионной Оплата как это:
$com = CommissionPayment::first();
$com->invoice->id;
Я тогда получаю эту ошибку:
SQLSTATE[42S22]: Column not found: 1054 Unknown column
'invoices.commission_payment_id' in 'where clause' (SQL: select * from `invoices`
where `invoices`.`commission_payment_id` = 15 and `invoices`.`commission_payment_id` is not
null limit 1)
Почему ищет commission_payment_id
поля в invoices
таблице ? Я бы ожидать запрос вроде этого:
SELECT * FROM `invoices` WHERE `id` = 23
/* id is fetched from the `invoice_id` field in the `commission_payments` table */
Должен ли я добавить столбец для каждой таблицы, которая будет ссылаться на invoice_id? На данный момент это два, но это может расти. Кроме того, когда для оплаты комиссии был создан счет-фактура, ему не потребуется поле для членства, поэтому я не думаю, что он должен туда идти.
Это один всегда смущало меня, очень хорошее объяснение. –
Спасибо за разъяснение! Это действительно помогает! – metamaker