【问题标题】:Joining belongsToMany and getting all columns加入belongsToMany并获取所有列
【发布时间】: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为重复的列命名。
  • @aynber 感谢您指出其他答案。但在我的问题中,我忘了补充,我使用的是 paginate(),所以我不能使用 get()。
  • 您可以使用select('menu_groups.*, system_employees.id AS se_id, ...')。但是,如果您使用的是 Eloquent,为什么不直接使用 with() 加载菜单项及其关系?
  • @fubar 谢谢你的回答。我不知道如何将 with() 与 belongsToMany() 结合起来,我想继续使用它。所以我找到了另一个解决方案。解决方案,现在看起来很明显。

标签: php mysql laravel-5 eloquent


【解决方案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);

所有表中的所有列都可以这样定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 2017-04-27
    • 2023-03-18
    • 1970-01-01
    • 2011-09-05
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多