【问题标题】:Laravel Eloquent OrderBy with a belongsTo on model LaravelLaravel Eloquent OrderBy 与模型 Laravel 上的 belongsTo
【发布时间】:2021-07-23 01:06:10
【问题描述】:

在 Laravel 中是否有动态 OrderBy a belongsTo?或者这只能在加入时起作用?我想让它尽可能干净,这就是我使用 belongsTo 的原因。

这是我的查询,我遇到的问题是我不知道如何查询关系表。

$users = User::where('company_id', Auth::user()->company_id)
->search(trim($this->search))
->orderBy($this->column,$this->order)
->paginate($this->size);

我的 $columns 变量

$columns = collect(['username'=>'Username',
                            'email'=>'Email'
                            ]);

我想将companies 表中的namecodeid 添加到我在$columns 变量中的选项中。

当我尝试通过company.name 订购时,这给了我column not found 的错误

这就是我在前端显示它的方式,因为我在模型中有belongsTo

<td>{{$user->company->id}}</td>
<td>{{$user->company->name}}</td>
<td>{{$user->company->code}}</td>
<td>{{$user->username}}</td>
<td>{{$user->email}}</td>

【问题讨论】:

  • 您能澄清一下您要完成的工作以及遇到的问题吗?目前还不是很清楚。您的第一个代码块是 Eloquent 关系方法,似乎与第二个代码块(查询生成器语句)无关,然后第三个代码块是两者中均未使用的变量。
  • 我想你在寻找点符号,没有找到关于这个的文档,但是-&gt;orderBy('company.name', $this-&gt;order)
  • @miken32 我有一张桌子,上面有 UserCompany 我可以订购的唯一列是来自 User 的用户名和电子邮件,但我不能按列订购Company name, codeid 如果我使用点符号 column not found 会出错
  • 您需要选择使用 Eloquent 或使用 Query Builder。您正在使用 Query Builder,因此关系与此无关,您正在直接使用数据库结构。您可能没有名为company 的数据库表。请改用companies.name
  • 不工作@miken32 它仍然说找不到列。

标签: php mysql laravel eloquent


【解决方案1】:

我认为你可以使用连接,也许试试

$users = User::where('company_id', Auth::user()->company_id)
    ->leftJoin('company', 'company.id', '=', 'users.company_id')
    ->search(trim($this->search))
    ->orderBy($this->column,$this->order)
    ->paginate($this->size);

现在您在查询中有 company.name 可供订购。

【讨论】:

    猜你喜欢
    • 2019-06-05
    • 2019-05-14
    • 1970-01-01
    • 2016-07-19
    • 2015-06-17
    • 2019-03-29
    • 1970-01-01
    • 2020-12-24
    • 2017-07-31
    相关资源
    最近更新 更多