【问题标题】:Laravel get value of column from relation through pivot on load() after all()Laravel 毕竟通过 load() 上的枢轴从关系中获取列的值()
【发布时间】:2015-06-12 16:06:55
【问题描述】:

我在从 Laravel 的关系中检索列的值时遇到问题。
我有一个用户模型。该模型与表格有关。一个名为 Userhobbies 的模型。
现在我们有:
User ::: hasMany >>> Userhobbies
现在有了
User::all()->load('hobbies')
,我得到了正确的结果,例如

{"id":"1","username":"jdoe","first_name":"Joe","last_name":"Doe","birth":"
1992-04-11","picture_id":"f3dca65323e876026b409b9ba3d49c56","hobbies":
[{"hobby_id":"1","user_id":"1"},{"hobby_id":"2","user_id":"1"},
{"hobby_id":"3","user_id":"1"},{"hobby_id":"4","user_id":"1"}]}

如您所见,Userhobbies 仅包含 hobby - table (Hobby Model) 和 user - table (User Model) 之间的主键关系。
(爱好模型也与用户爱好有 hasMany 关系)

我现在的问题是 - 如何在我的呼叫中(在 load('hobbies') 之后)检索所有爱好名称(来自爱好 - 表),是否可以不编写大量代码?

为了更好地理解我的想法,我想要检索的结果:

{"id":"1","username":"jdoe","first_name":"Joe","last_name":"Doe","birth":"
1992-04-11","picture_id":"f3dca65323e876026b409b9ba3d49c56","hobbies":
["golf", "cards", "games", "football"]}


编辑:
如果我尝试以下操作(我尝试在用户和爱好中使用 belongsToMany):

User::with('hobbies')->get()->first()

我从爱好中获得了全部价值 - 表:

{user-specific data ...
hobbies:[{"id":"1","name":"golf","created_at":"2015-04-07 
14:15:02","updated_at":"2015-04-07 14:15:02","pivot":
{"user_id":"1","hobby_id":"1"}},
{"id":"2","name":"cards","created_at":"2015-04-07 
14:15:02","updated_at":"2015-04-07 14:15:02","pivot":    
{"user_id":"1","hobby_id":"2"}},
{"id":"3","name":"games","created_at":"2015-04-07 
14:15:02","updated_at":"2015-04-07 14:15:02","pivot":
{"user_id":"1","hobby_id":"3"}},
{"id":"4","name":"football","created_at":"2015-04-07 
14:15:02","updated_at":"2015-04-07 14:15:02","pivot":
{"user_id":"1","hobby_id":"4"}}]}

同样尝试->load('hobbies')。我真的不知道怎么继续下去。

为了更详细地解释我需要什么,可以想象这样的查询:

User::all(['id', 'name'])->load(array('hobbies.id','hobbies.name'))->get();

【问题讨论】:

    标签: database laravel foreign-keys eloquent relationship


    【解决方案1】:

    据我所知,我知道可以使用闭包对执行加载的查询设置约束,如下所示:

    User::all()->load(['hobbies' => function($query)
    {
        $query->select('id', 'name');
    }]);
    

    通过这样做,当您将其转换为数组时,它将产生接近您想要的结果。您甚至可以将 'pivot' 添加到 $hidden 模型上的 $hidden 属性以隐藏此信息。

    【讨论】:

    • 为您解答。但这并不能解决我的问题。如果可能的话,我想要一个查询来获得最后的 json 响应。问题部分在这里User::all()->WHATS_NEXT?得到它
    • 所以基本上,你想要的是:当你将一个用户(或一组用户)投射到一个数组时,它会附加爱好列表?
    • 我想我可以用->all(HERE_MY_COLUMS) 检索所有需要的用户数据,并说我希望包括他与爱好的关系。如果我继续使用每个用户,我就可以毫无问题地获得我需要的东西。请看我上面的编辑
    • ty,我仍然得到像pivot:... 这样的值,但我认为应该这样做
    • @x4k3p 是的,这就是为什么我建议将它添加到您的模型中,这样您就可以摆脱它了。
    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 2019-07-27
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多