4

我一直在尝试掌握 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这也给出了一个错误(尝试获取非对象的属性)

我究竟做错了什么?

4

3 回答 3

3

您是否尝试过急切加载?

foreach (Product::with('images')->get() as $product)
{
    echo $product->images->first()->url;
}
于 2013-04-11T11:23:11.440 回答
1

images属性是一个类似数组的属性,您可以循环访问。

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

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

$product->images[0]->url;
于 2013-04-11T06:52:43.233 回答
0

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

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

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

注意:尚未对其进行测试,但应该可以使用。让我们知道。

于 2013-04-11T07:30:33.273 回答