【问题标题】:Laravel 5.5: Convert query builder to eloquentLaravel 5.5:将查询构建器转换为 eloquent
【发布时间】:2017-10-20 11:23:24
【问题描述】:

有没有办法将此查询构建器转换为 eloquent?

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

我尝试了 一对多。但它需要find() 函数,所以它给了我一个帐户的交易,但我需要选择所有带有accounts.name 的交易

【问题讨论】:

  • 是的,我知道,但是怎么做? :) 我尝试使用 一对多。但它需要find() 函数。我需要选择所有带有accounts.name的交易

标签: php laravel laravel-eloquent laravel-5.5 laravel-query-builder


【解决方案1】:

在 cmets 中,您说过您定义了一对多关系(我假设它的 Accounts 有很多 Transactions)并且您需要获取所有带有帐户名称的交易,所以这样做:

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

account 是关系:

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

然后你就可以像这样显示数据了:

@foreach ($transactions as $transaction)
    {{ $transaction->id }}
    {{ $transaction->account->name }}
@endforeach

【讨论】:

  • 那行得通!那就是我正在寻找的{{ $transaction->account->name }}。非常感谢@alexey-mezenin :)
【解决方案2】:

你需要使用模型来做到这一点。

  1. 交易模型和账户模型。

  2. 定义他们的关系

  3. 在事务模型中创建一个方法来检索相关的帐户名称。

    function accoutNames() { //blablabla }

  4. 在控制器中进行查询,类似这样:

    事务->accountNames();

【讨论】:

  • Transaction::accountNames(); 出现此错误不应静态调用非静态方法 App\Transaction::accountNames()
  • 对不起,我的错误,应该在实例上调用 mehtod,它不是 :: 而是 ->
  • 喜欢吗? $transactions = Transaction->accountNames(); 我得到了这个错误:) 解析错误:语法错误,意外'->' (T_OBJECT_OPERATOR)
猜你喜欢
  • 2016-02-11
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
相关资源
最近更新 更多