gpt4 book ai didi

php - 在 Laravel4 中过滤返回关系的字段?

转载 作者:搜寻专家 更新时间:2023-10-31 21:11:31 26 4
gpt4 key购买 nike

在 Laravel 4 中使用预先加载时,我们可以使用以下方式加载关系:

$user = User::with('role')->find(1);

这将返回用户的表示,我们可以通过

访问角色的表示
$user->roles();

现在我们还可以使用 where 过滤预先加载

$user = User::with(array('role' => function($query) {
$query->where('name', 'like', '%key%');
}))->find(1);

这将返回用户表示,仅当角色名称字段包含 key 时才填充角色。

我们可以通过添加 select() 约束来限制用户表示返回的字段。

$user = User::with(array('role' => function($query) {
$query->where('name', 'like', '%key%');
}))->select('email')->find(1);

这只会返回用户表示中的 emailid 字段,但会返回角色表示中的所有字段。

我希望我可以限制关系返回的字段(用于 api),但我似乎找不到办法;我已经尝试了以下两种方法。

$user = User::with(array('role' => function($query) {
$query->select('name');
}))->find(1);

$user = User::with('role')->select('role.name')->find(1);

最佳答案

您可以在关系定义中指定您想要的列。

// app/model/User.php
<?php

class User extends Eloquent
{
public function roles()
{
return $this->hasMany('Role')->select(array('id', 'name'));
}
}

array('id', 'name') 数组中的第一个参数是角色表上将其连接到用户表的外键列。

编辑(根据您的评论)

我尝试了几件事,在第一个例子中你走在了正确的道路上。一点点改变:

$user = User::with(array('role' => function($query) {
$query->select(array('id', 'name'));
}))->find(1);

这应该有效。

关于php - 在 Laravel4 中过滤返回关系的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18738848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com