2014-03-03 231 views
0

我正在尋找解決方案如何通過'別名'字段訪問雄辯的模型項目。 通過'id'訪問項目沒有問題。但是構建自定義查詢我發現自己無法訪問項目屬性。laravel訪問模型屬性

這段代碼可以完美運行

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

但是,如果我查詢的項目與任何其他說法 - 屬性不可訪問

此代碼

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

拋出一個異常

Undefined property: Illuminate\Database\Eloquent\Collection::$title 

請你幫忙。

回答

4

你已經得到了答案,但這裏有一些見解,當您使用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();將只返回一個(第一個物品)模型,它是您的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 

您可以讀取寫入LaravelCollectionthis article目的。

4

get()返回一個Collection的項目。您可能需要first()返回單個項目。