加入belongsToMany并获取所有列
Posted
技术标签:
【中文标题】加入belongsToMany并获取所有列【英文标题】:Joining belongsToMany and getting all columns 【发布时间】:2018-03-29 15:55:56 【问题描述】:我有这个方法:
公共功能菜单组() return $this->belongsToMany(Layout::class, '_layout_pivot', 'side_menu_item_id', 'side_menu_group_id')->withTimestamps();结果是这样的(循环之一):
"id" => 1 “标签” => “系统/menu.settings_group” “图标” => “图标设置” “排序” => 10 “system_employee_id”=> 10 "created_at" => "2017-07-19 03:24:06" "updated_at" => "2017-07-17 00:00:00"
我还有表“system_employees”(只有几个示例列):
+----+----------------+------------+-----------+ -----+----------+----------+ |编号 |用户名 |名字 |姓氏 |年龄 | created_at |更新时间 | +----+----------------+-----------+------------+--- --+----------+----------+ | 1 |拉奎尔46932071 |拉奎尔 |海勒 | 25 | 2017-04-26 05:03:43 | 2017-07-03 21:13:37 | | 2 |布兰特13975229 |布兰特 |罗森鲍姆 | 30 | 2017-04-25 21:34:46 | 2017-05-07 09:28:27 | +----+----------------+-----------+------------+--- --+----------+----------+
system_employee_id from >belongsToMany 是 system_employees 的外键,等于 system_employees.id
我正在尝试将两者结合起来,以获得 system_employee 名称。
编辑(根据 aynber 评论):
我加入这两个并使用 paginate(),所以我不能使用 get 和 select,或者为列添加前缀:
$this->menuGroups ->leftJoin('system_employees', 'system_employees.id', '=', '_layout_side_menu_groups.system_employee_id') ->分页($pages, $columns, $pageName, $page);
这就是我得到的:
"id" => 18 "label" => "Some Insert Tester" “图标” => “insico” “排序” => 39 “system_employee_id”=> 18 "created_at" => "2017-07-03 00:28:05" "updated_at" => "2017-07-03 00:28:05" “类型” => 4 "system_id" => 0 "用户名" => "System2017" “名字” => “丽塔” “姓氏” => “维刚” “年龄” => 0 “性别” => “” “电子邮件” => “system@gmail.com” “移动”=>“” “rank_id” => 1 “rank_title” => “” “状态”=> 1 “头像” => “mysite.com/img/14161939651400nds6k.jpg” “密码” => “$2y$10$FIL4LmjLVEZ6SgUsRILqPutTEcaGWcmKyIHwPOBbQfHDYdJM5//2。” "remember_token" => "vUI812NTJZ8RWrlX3g3quBy4quVrue1dnOVZEPzifRJdy85cJPQY7RclYNHU"
问题:
如何在不使用查询生成器的情况下从两个表中获取“created_at”、“updated_at”? 这同样适用于两个表中具有相同名称的任何其他列。
换句话说:有没有办法在 belongsToMany 中为列添加前缀?
【问题讨论】:
你必须指定你想要的列,并用AS
为重复的列命名。
How to alias the name of a column in Eloquent的可能重复
@aynber 感谢您指出其他答案。但在我的问题中,我忘了补充,我使用的是 paginate(),所以我不能使用 get()。
您可以使用select('menu_groups.*, system_employees.id AS se_id, ...')
。但是,如果您使用的是 Eloquent,为什么不直接使用 with()
加载菜单项及其关系?
@fubar 谢谢你的回答。我不知道如何将 with() 与 belongsToMany() 结合起来,我想继续使用它。所以我找到了另一个解决方案。解决方案,现在看起来很明显。
【参考方案1】:
由于我使用的是 paginate() 而不是 get(),所以我认为我无法指定列。
但可以做到。
Paginate 允许定义列 - 它就在那里看着我。
这是对我有用的解决方案:
$列 = [ '_layout_side_menu_groups.created_at AS layout_created_at', '_layout_side_menu_groups.updated_at AS layout_updated_at', 'system_employees.created_at AS system_created_at', 'system_employees.updated_at AS system_updated_at', ]; $this->menuGroups ->leftJoin('system_employees', 'system_employees.id', '=', '_layout_side_menu_groups.system_employee_id') ->orderBy('_layout_side_menu_groups.' . $columnSorted, $sortOrder) ->分页($pages,$columns,$pageName,$page);所有表中的所有列都可以这样定义。
【讨论】:
以上是关于加入belongsToMany并获取所有列的主要内容,如果未能解决你的问题,请参考以下文章
Bookshelf.js belongsToMany 查询列错误
如何在 Sequelize 中对 belongsToMany 关联进行***查询?