Laravel - 如何通过模型方法从对象获取字符串值?

时间:2016-01-22 13:20:17

标签: laravel laravel-5

我有模型房子与关系hasMany HousePhotos。 我尝试从table house_photos获取主照片的链接。

class House extends Model
{

    public function photos(){

    return $this->hasMany('app\HousePhoto');

    }

    public function get_main_photo(){

    return $this->photos()->where('main', true);

    }

}

控制器:

$house=House::find(1);

在视图中我使用

{{$house->main_photo()->link}} 

并且出错了。

当我使用

{{$house->main_photo()}} 

我有了对象。如何获取链接到照片的字符串值?

1 个答案:

答案 0 :(得分:1)

首先,您需要了解Builder对象和Collection对象之间的区别。

现在,函数get_main_photo返回一个Builder对象(实际上是一个包含Builder的Relation对象)。

在这些对象上,您可以调用函数get()来完成查询并获得结果。在这种情况下,您将获得一个Collection对象,您可以迭代它。 或者,在这种情况下,您似乎每个房子只有一张“主照片”,因此您可以拨打first()

public function get_main_photo(){    
    return $this->photos()->where('main', true)->first();    
}

这将返回单个关联模型,您可以在该模型上访问->link(如果找到模型)。

请记住,在调试的任何时候,您都可以调用方便的dd函数(转储作为参数传递的对象并终止应用程序),以查看您正在处理的对象类型及其所有属性。 / p>