在Laravel中,如果执行查询:
$foods = Food::where(...)->get();
...然后,$foods
是Food
模型对象的集合。(基本上是一系列模型。)
但是,此数组的键仅为:
[0, 1, 2, 3, ...]
...所以如果我想改变,比如说,id
为24的Food
对象,我不能这样做:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
...因为这只会改变数组中的第25个元素,而不是id为24的元素。
如何通过任何属性/列(例如但不限于id/Color/age/etc)从集合中获取单个(或多个)元素?
当然,我可以这样做:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
...但是,那太恶心了。
当然,我可以做到:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
...但这更糟糕,因为当我在$foods
集合中已经有了所需的对象时,它会执行额外的不必要的查询。
提前感谢您的指导。
编辑:
为了清楚起见,您可以调用-
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
但是,仍然没有干净(非循环、非查询)的方法通过集合中的属性获取元素,如下所示:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(
从Laravel5.5开始,您可以使用firstWhere()
就你而言:
$green_foods = $foods->firstWhere('color', 'green');
Laravel提供了一个名为keyBy
的方法,该方法允许在模型中根据给定的键设置键。
$collection=$collection-
将返回集合,但键是来自任何模型的
id
属性的值。
然后你可以说:
$desired\u food=$foods-
而且它将抓取正确的项目,而不需要使用过滤功能。
您可以使用过滤器
,如下所示:
$desired_object = $food->filter(function($item) {
return $item->id == 24;
})->first();
过滤器
也将返回一个集合
,但由于您知道只有一个集合,因此可以首先调用该集合
。
你再也不需要过滤器了(也许永远都不需要,我不知道这已经快4年了)。您可以先使用:
$desired_object = $food->first(function($item) {
return $item->id == 24;
});
我一直在查看Laravel系列的文档和API,但似乎没有找到我想要的: 我想从集合中检索具有模型数据的数组,但只获取指定的属性。 例如,类似于,其中集合实际上包含用户的所有属性,因为它们在其他地方使用,但在这个特定位置,我需要一个包含userdata的数组,并且只包含指定的属性。 在拉雷维尔,似乎没有一个帮手来帮你我怎样才能用最简单的方法做到这一点?
我想从最终结果中删除一些属性,并在这里找到了这个从Laravel集合中仅获取特定属性 这适用于顶层,但需要从相关项目中删除一些属性,例如用户有一个访问卡,并且访问卡的属性中有一些长文本详细信息。 我想从最终结果中删除该属性。使用链接中提到的方法是否可行?
我有一个包含如下值的对象 这些都在变量autossuggest中。现在我只想获得值 谢谢你的小费
简单的代码不起作用!我一直在用if语句获取行上非object的属性时出错。我尝试像数组一样访问它,但收到一条消息说它不能以数组的形式访问stdClass。 $group的print\u r、var\u dump和dd可以给出: 使用$setting=$group\u可以- 返回错误不能使用stdClass类型的对象作为数组 laravel错误的详细信息如下: 可处理的例外情况- 编辑我删除了第一部
问题内容: 我正在为Magento(1.6)商店开发类别汇总报告。 为此,我想获得一部分产品的“订单项”集合-这些产品的唯一类别ID(这是我创建的Magento产品属性)与特定值匹配。 我可以通过基于目录/产品的集合来获得相关的结果集。 Magento不喜欢它,因为有相同商品ID的重复条目。 如何根据订单项构建代码以获取此结果集?加入按属性过滤的产品集合使我难以理解。这段代码并不能解决问题,因为它
我正在用Laravel 5.2开发一个Web应用程序,但有一个问题我无法解决。 我有一个扩展了雄辩模型的模型,但当我试图输出带有“where”的数据库表时,例如 它返回一个包含许多信息的集合,这些信息此时对我来说无用,比如“守卫”、“键入”...我的表的数据在“属性”下。遵循laravel的指南,我看到每个人都像我一样简单地使用它,然后用