Отношения Laravel Eloquent, извлекающие третье значение таблицы / отношения

У меня есть 3 таблицы в базе данных

  1. Транзакция {'id','bill_id','remark'}
  2. Счета {'id','third_party','amount'}
  3. Третья сторона {'id','company_name',remark}

В таблице 'transaction' есть столбец bill_id из 'Bills', а в таблице Bills есть столбец 'third_party', связанный с столбцом таблицы ThirdParty -> 'id'

Итак, здесь я пытаюсь получить company_name, используя красноречивое отношение laravel

Моя модель транзакции:

public function Bills()
{
    return $this->hasOne('App\Bills','id','bill_id');
}

Счета:

public function third_party()
{
    return $this->belongsTo('App\ThirdParty','third_party','id');
} 

Я получаю нулевое значение для company_name

введите описание изображения здесь

Вот запрос, который я использую

Transaction::with('Bills.third_party')->get();

И я исправил вопрос (третье_партийное_имя) на имя столбца company_name, которое я написал здесь, было моим старым именем запроса на соединение, которое видно на снимке экрана, в основном я пытаюсь получить название компании.


person Khagesh    schedule 16.03.2019    source источник
comment
Я не использую Laravel, но я не вижу там никаких внешних ключей или, по крайней мере, ничего похожего на меня. Для №3 Как эта таблица соотносится с двумя другими? забыл цитаты на последнем {'id','company_name',remark} - сразу говорю.   -  person ArtisticPhoenix    schedule 16.03.2019
comment
в таблице Bills имя столбца third_party - это внешний ключ, который принадлежит первичному ключу таблицы ThirdParty 'id'   -  person Khagesh    schedule 16.03.2019
comment
показать красноречивый запрос на то же   -  person Palak Jadav    schedule 16.03.2019


Ответы (1)


Вы можете показать весь свой код? Каким образом company_name устанавливается на third_party_name?

Вы, вероятно, также можете многого добиться, придерживаясь «соглашений» или «предлагаемого наименования» laravel, это даст вам много функций бесплатно и упростит чтение, запись и отладку вашего кода.

например. Имена ваших методов отношений (Bills (), third_party ()), но, что более важно, если вы назовете свои поля таблицы «способом laravel», вы получите более простые красноречивые отношения, поскольку не будет необходимости определять внешние ключи и т. Д.

Я бы настроил это примерно так:

  1. Транзакция {'id', 'bill_id', 'замечание'}
  2. Bills {'id', 'third_party_id', 'amount'} ‹- обратите внимание на third_party_id
  3. ThirdParty {'идентификатор', 'имя_компании', примечание}

    class Transaction extends Model
    {
        public function Bills()
        {
            return $this->hasOne('App\Bills');
        }
    }
    
    class Bills extends Model
    {
        public function ThirdParty()
        {
            return $this->belongsTo('App\ThirdParty);
        }
    }
    

Вы также должны определить обратные отношения.

Было бы очень полезно увидеть полный код, чтобы понять, в чем проблема.

person Matt Presland    schedule 16.03.2019
comment
Я обновил красноречивый запрос, результат запроса возвращается для просмотра в виде ответа в кодировке json. - person Khagesh; 16.03.2019