Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔从关系中雄辩地选择_Php_Laravel_Relationship_Laravel 4_Eloquent - Fatal编程技术网

Php 拉威尔从关系中雄辩地选择

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

我一直在努力掌握拉威尔的窍门。我用的是拉威尔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和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。谢谢你,它非常适合我要找的东西!