雄辩的选择关系


Laravel Eloquent select from relationship

我一直在尝试掌握Laravel的窍门。我用的是Laravel 4。现在我有两个表,一个"产品"表和一个"图像"表。一个产品可以有多个图像,一个图像属于一个产品。

所以我有两个模型:

class Product extends Eloquent {
    public function images()
    {
        return $this->hasMany('Image');
    }
}
class Image extends Eloquent {
    protected $table = 'product_images';
    public function product()
    {
        return $this->belongsTo('Product');
    }
}

现在我正在构建资源的"索引"页面,所以我在控制器中执行Product::all()并将其发送给视图。

在视图中,我执行foreach并循环遍历所有产品。但现在我想要一个图像来展示产品。但我似乎不知道如何获得,例如,第一张图像。

当我执行$product->images时,我得到一个与产品相关的所有图像的对象。

当我做$product->images->url时,我得到一个错误(未定义属性'url')

我试过$product->images->first()->url这也给出了一个错误(试图获得非对象的属性)

我做错了什么?

你试过急切加载吗?

foreach (Product::with('images')->get() as $product)
{
    echo $product->images->first()->url;
}

images属性是一个类似数组的属性,可以循环使用。

foreach ($product->images as $image) {
    echo $image->url;
}

或者,如果您只需要第一个,您可以访问索引。

$product->images[0]->url;

您可以尝试使用下面的PHP函数。

$first_image = array_shift($product->images);

然后,$first_image将是一个图像对象,访问图像的URL应该很容易:$first_image->ulr

注意:还没有测试过,但应该可以工作。