Laravel 5.5: преобразовать построитель запросов в красноречивый

Есть ли способ преобразовать этот построитель запросов в красноречивый?

$transactions = DB::table('transactions')
    ->join('accounts', 'transactions.account_id', '=', 'accounts.id')
    ->select('transactions.*', 'accounts.name as account_name')
    ->paginate(5);

Я попробовал это с Один ко многим. Но для этого нужна функция find(), поэтому она дает мне транзакции одной учетной записи, но мне нужно выбрать все транзакции с account.name


person Fatih Kısa    schedule 20.10.2017    source источник
comment
Да. Используйте отношения: laravel.com/docs/5.5/eloquent-relationships   -  person Alexey Mezenin    schedule 20.10.2017
comment
Да я знаю, но как? :) Я попробовал это с Один ко многим. Но для этого нужна функция find(). Мне нужно выбрать все транзакции с account.name   -  person Fatih Kısa    schedule 20.10.2017


Ответы (2)


В комментариях вы сказали, что у вас определено отношение «один ко многим» (я предполагаю, что в его учетных записях много транзакций), и вам нужно получить все транзакции с именем учетной записи, поэтому сделайте следующее:

Transaction::with('account')->paginate(5);

Где account отношение:

public function account()
{
    return $this->belongsTo(Account::class);
}

Затем вы сможете отображать данные следующим образом:

@foreach ($transactions as $transaction)
    {{ $transaction->id }}
    {{ $transaction->account->name }}
@endforeach
person Alexey Mezenin    schedule 20.10.2017
comment
Это работает! Это было {{ $transaction->account->name }} то, что я ищу. Большое спасибо @alexey-mezenin :) - person Fatih Kısa; 20.10.2017

Для этого вам нужно будет использовать модели.

  1. Модель транзакции и модель счета.

  2. Определите их отношения

  3. Создайте метод в модели транзакций для получения связанных имен учетных записей.

    функция accoutNames() { //blablabla }

  4. Сделайте запрос в контроллере, что-то вроде этого:

    Транзакция->имя_аккаунта();

person Aleksei Maide    schedule 20.10.2017
comment
Я получил эту ошибку для Transaction::accountNames(); Нестатический метод App\Transaction::accountNames() не должен вызываться статически - person Fatih Kısa; 20.10.2017
comment
извините, моя ошибка, меход должен быть вызван в экземпляре, это не ::, а -› - person Aleksei Maide; 20.10.2017
comment
Как это? $transactions = Transaction->accountNames(); Я получил эту ошибку за это :) Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '->' (T_OBJECT_OPERATOR) - person Fatih Kısa; 20.10.2017