Laravel 4-从集合中获取属性数组

Laravel 4-从集合中获取属性数组,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有一组物品。假设对象是标记: $tags = Tag::all(); 我想为每个标记检索某个属性,比如它的名称。我当然可以 foreach ($tags as $tag) { $tag_names[] = $tag->name; } 但对于这个问题有没有更为宽泛的解决方案 类似于$tags->name?您可以使用array\u column来实现这一点(这是一个PHP5.5函数,但Laravel有一个helper函数,它在很大程度上复制了行为) 像这样的东西就足够了 $tag

我有一组物品。假设对象是标记:

$tags = Tag::all();
我想为每个标记检索某个属性,比如它的名称。我当然可以

foreach ($tags as $tag) {
    $tag_names[] = $tag->name;
}
但对于这个问题有没有更为宽泛的解决方案


类似于
$tags->name

您可以使用
array\u column
来实现这一点(这是一个PHP5.5函数,但Laravel有一个helper函数,它在很大程度上复制了行为)

像这样的东西就足够了

$tag_names = array_column($tags->toArray(), 'name');

是的,你可以轻松愉快地完成。如前所述,您可以这样做

从表中检索所有行

$users = DB::table('users')->get();

foreach ($users as $user)
{
var_dump($user->name);
}
$user = DB::table('users')->where('name', 'John')->first();

var_dump($user->name);
$users = DB::table('users')->select('name', 'email')->get();

$users = DB::table('users')->distinct()->get();

$users = DB::table('users')->select('name as user_name')->get();
从表中检索一行

$users = DB::table('users')->get();

foreach ($users as $user)
{
var_dump($user->name);
}
$user = DB::table('users')->where('name', 'John')->first();

var_dump($user->name);
$users = DB::table('users')->select('name', 'email')->get();

$users = DB::table('users')->distinct()->get();

$users = DB::table('users')->select('name as user_name')->get();
从行中检索单个列

$name = DB::table('users')->where('name', 'John')->pluck('name');
检索列值列表

$roles = DB::table('roles')->lists('title');
此方法将返回角色标题数组。 还可以为返回的数组指定自定义键列:

$roles = DB::table('roles')->lists('title', 'name');
指定Select子句

$users = DB::table('users')->get();

foreach ($users as $user)
{
var_dump($user->name);
}
$user = DB::table('users')->where('name', 'John')->first();

var_dump($user->name);
$users = DB::table('users')->select('name', 'email')->get();

$users = DB::table('users')->distinct()->get();

$users = DB::table('users')->select('name as user_name')->get();
编辑:

上面的例子展示了如何在Laravel的fluent query builder的帮助下访问数据。如果您使用的是模型,则可以使用

由于Eloquent在内部使用查询生成器,因此您可以毫无问题地执行以下操作:

$tag_names = $tags->lists('tag_name_label', 'tag_name_column')->get();
这也可以通过以下方式实现:

$tag_names = DB::table('tags')->lists('tag_name_label', 'tag_name_column')->get();

集合有一个
列表
方法,类似于@Gadoma描述的表的方法。它返回一个数组,其中包含集合中每个项的给定属性值

要从我的标记集合中检索所需的名称数组,我只需使用:

$tags->lists('name');
更新:laravel 5.2
列表开始
被替换为


更具体地说,“
列出了集合、查询生成器和雄辩的查询生成器对象上的
方法,已重命名为
pulk
。方法签名保持不变。”

以下是我今天上午在这方面的实验片段。我只希望集合有一个$Collection->distinct()方法,这样我就可以根据已经过滤过的集合轻松地生成列值列表

想法

我希望这些代码片段有助于澄清从表、集合和雄辩的模型生成唯一值列表的一些可选选项

使用收藏(快乐)

使用雄辩的模型(更快乐)

使用雄辩的模型加缓存(最快乐)

如果你们有其他选择的话,我很想听听


@ErikOnTheWeb

$tags->name
一开始我也希望它能正常工作,但事实并非如此:
未定义的属性:Illumb\Database\Eloquent\Collection::$name
@severin$tags是对象的集合,而不是具有name属性的单个对象。您需要遍历$tags以获得每个标记名。从标记中获取name属性没有意义。它将如何假定您实际要打印哪个名称属性。谢谢。这确实让我找到了一个合适的解决方案,但在您的回答中,DB方法和适用于集合的方法之间似乎存在一些混淆。根据您的评论进行编辑。我认为,在您的编辑中,应该是Tag::list('Tag_name_label')->get();谢谢这很有效。然而,我认为
lists
方法更大。
lists
方法是一个非常好的发现。在创建html选择表单的情况下,列表工作得太好了:
form::select('subcategory',array(null=>'Please Choose')+$category->firstSubcategories->list('name',id'))
@BishalPaudel或您可以执行
$firsSubcategories=$category->firstSubcategories->list('name','id')在控制器中,然后在blade中选择('subcategory',array(null=>'Please Choose')+$firsSubcategories)
,尽管如此。@5.2版后已弃用。直接使用“拔”法。