laravel访问模型属性

时间:2014-03-03 21:30:24

标签: laravel eloquent

我正在寻找解决方案如何通过'别名'字段访问雄辩的模型项目。 通过'id'访问项目没有问题。但是,构建自定义查询时,我发现自己无法访问项目属性。

这段代码完美无缺

$cat = Category::find(1);
return $cat->title;

但如果我查询带有任何其他参数的项目 - 属性不可访问

此代码

$cat = Category::where('alias','=','vodosnab')->get();
return $cat->title;

抛出异常

Undefined property: Illuminate\Database\Eloquent\Collection::$title
你能帮忙吗?

2 个答案:

答案 0 :(得分:5)

get()会返回Collection项。您可能需要返回单个项目的first()

答案 1 :(得分:5)

您已经得到了答案,但这里有一些见解,当您使用get()all()时,它会返回一组模型对象,这是Illuminate\Database\Eloquent\Collection的一个实例,所以这里你会得到一个Collection对象

$cat = Category::where('alias','=','vodosnab')->get();

现在,您可以使用$cat->first()从集合中获取第一项(Category Model),也可以使用$cat->last()获取最后一项或$cat->get(1)从集合中获取第二个项目。 Collection对象中提供了这些方法。

使用像first()这样的Category::where('alias','=','vodosnab')->first();方法只返回一个(第一个mathing项)模型,它是Category模型的一个实例。因此,使用all()get()来获取模型对象的集合,您可以遍历集合,如:

foreach(Category::all() as $cat) { // or Category::get()
    $cat->propertyName;
}

或者您可以使用:

$categories = Category::where('alias','=','vodosnab')->get();
foreach($categories as $category) {
    $category->propertyName;
}

另外,您可以使用:

$categories = Category::where('alias','=','vodosnab')->get();
$firstModel = $categories->first();
$lastModel = $categories->last();
$thirdModel = $categories->get(2); // 0 is first

如果您只需要一个,那么您可以直接使用:

$category = Category::where('alias','=','vodosnab')->first();
$category->fieldname;

请记住,如果您使用get(),即使数据库中只有一条记录可用,您也会获得Model个对象的集合。所以,在你的例子中:

$cat = Category::where('alias','=','vodosnab')->get();
return $cat->title;

您正试图从Collection对象获取属性,如果您愿意,可以使用:

$cat = Category::where('alias','=','vodosnab')->get();
return $cat->first()->title; // first item/Category model's title
return $cat->last()->title; // last item/Category model's title
return $cat->get(0)->title; // first item/Category model's title

您可以阅读Laravel Collection对象上写的this article