Php 拉威尔从关系中雄辩地选择
我一直在努力掌握拉威尔的窍门。我用的是拉威尔4。 现在我有两个表,一个“产品”表和一个“图像”表。 一个产品可以有许多图像,并且一个图像属于一个产品 所以我有两个模型:Php 拉威尔从关系中雄辩地选择,php,laravel,relationship,laravel-4,eloquent,Php,Laravel,Relationship,Laravel 4,Eloquent,我一直在努力掌握拉威尔的窍门。我用的是拉威尔4。 现在我有两个表,一个“产品”表和一个“图像”表。 一个产品可以有许多图像,并且一个图像属于一个产品 所以我有两个模型: class Product extends Eloquent { public function images() { return $this->hasMany('Image'); } } class Image extends Eloquent { protect
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和loop。但现在我想用产品展示一张图片。但我似乎不知道如何获得,例如,第一张图像
当我执行$product->images
操作时,我会得到一个与产品相关的所有图像的对象
当我执行$product->images->url
时,我得到一个错误(未定义的属性“url”)
我尝试了$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
注意:尚未测试,但应该可以正常工作。让我们知道。您尝试过快速加载吗
foreach (Product::with('images')->get() as $product)
{
echo $product->images->first()->url;
}
当我这样做时:
$product->images[0]->url
,我得到未定义的偏移量:0
。当我使用foreach时,它确实起作用。如果每次我只想得到一张图片,就必须使用循环,那就不太好了。那么Marko的方法应该会奏效。很抱歉,我不能测试我的,因为我没有在我的开发机器上。嗯,我想我的初始设置有问题。我开始了一个全新的项目,现在$product->images[0]->url
看起来确实有效!我也尝试过类似的方法,这很有帮助。我有一个用户模型,其中role()属于('role');而users()的角色模型有许多('User')。我想让用户扮演这个角色。这样做了:dd(User::with('role')->find(2));但是,首先必须是with。谢谢你,它非常适合我要找的东西!