laravel访问模型属性

val*_*kan 2 laravel eloquent

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

这段代码非常完美

$cat = Category::find(1);
return $cat->title;
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用任何其他参数查询项目 - 属性是不可访问的

这段代码

$cat = Category::where('alias','=','vodosnab')->get();
return $cat->title;
Run Code Online (Sandbox Code Playgroud)

抛出一个例外

Undefined property: Illuminate\Database\Eloquent\Collection::$title
Run Code Online (Sandbox Code Playgroud)

能否请你帮忙.

The*_*pha 6

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

$cat = Category::where('alias','=','vodosnab')->get();
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用,从集合中$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;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用:

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

另外,您可以使用:

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

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

$category = Category::where('alias','=','vodosnab')->first();
$category->fieldname;
Run Code Online (Sandbox Code Playgroud)

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

$cat = Category::where('alias','=','vodosnab')->get();
return $cat->title;
Run Code Online (Sandbox Code Playgroud)

您正试图从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
Run Code Online (Sandbox Code Playgroud)

你可以阅读这篇写在对象上Laravel文章Collection.


Can*_*liş 5

get()返回一个Collection项目.您可能需要first()返回单个项目.