php – Laravel 4 – 在构建集合时将where子句附加到关系的雄辩方式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – Laravel 4 – 在构建集合时将where子句附加到关系的雄辩方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1999字,纯文字阅读大概需要3分钟。
内容图文
这可能是一个骗局,但我已经拖网一段时间寻找一个正确的答案,还没有找到一个.
因此,基本上我想要做的就是连接两个表,并根据连接表中的字段将where条件附加到整个集合.
所以我要说我有两张桌子:
users:
-id
-name
-email
-password
-etc
user_addresses:
-address_line1
-address_line2
-town
-city
-etc
为了论证(实现这可能不是最好的例子) – 假设用户可以有多个地址条目.现在,laravel / eloquent为我们提供了一种以范围形式包装条件的好方法,因此我们将使用其中一个来定义过滤器.
所以,如果我想让所有用户在smallville获得一个地址,我可以创建一个范围和关系,如下所示:
Users.php(型号)
class users extends Eloquent{
public function addresses(){
return $this->belongsToMany('Address');
}
public function scopeSmallvilleResidents($query){
return $query->join('user_addresses', function($join) {
$join->on('user.id', '=', 'user_addresses.user_id');
})->where('user_addresses.town', '=', 'Smallville');
}
}
这可行,但它有点难看,它会弄乱我的雄辩对象,因为我不再拥有包含用户地址的良好动态属性,所有内容都只是塞进用户对象中.
我已经尝试了其他各种方法来实现这一点,例如在关系上使用闭包看起来很有希望:
//这只是在附加关系时进行过滤,因此会显示所有用户,但只会拉出匹配的地址
User::with(array('Addresses' => function($query){
$query->where('town', '=', 'Smallville');
}));
//这根本不起作用
User::with('Addresses')->where('user_addresses.town', '=', 'Smallville');
那么是否存在一种“雄辩”的方式,以过滤主要集合的方式将where子句应用于关系并保持我的雄辩对象?或者我是否喜欢这么多其他人被Eloquent的优雅语法所破坏到我要求太多的地步?
注意:我知道您通常可以通过在另一个方向定义关系来解决这个问题(例如,首先访问地址表),但这并不总是理想的,而不是我要求的.
在此先感谢您的帮助.
解决方法:
此时,您无法根据相关模型中的约束过滤主模型.
这意味着,您只能在一次滑动中获得拥有user_address.town =’Smallwille’的用户.
我个人希望这会很快实现,因为我可以看到很多人要求它(包括我在这里).
目前的解决方法很混乱,但它的工作原理:
$products = array();
$categories = Category::where('type', 'fruit')->get();
foreach($categories as $category)
{
$products = array_merge($products, $category->products);
}
return $products;
内容总结
以上是互联网集市为您收集整理的php – Laravel 4 – 在构建集合时将where子句附加到关系的雄辩方式全部内容,希望文章能够帮你解决php – Laravel 4 – 在构建集合时将where子句附加到关系的雄辩方式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。