我一直在尝试掌握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
注意:还没有测试过,但应该可以工作。