从一对多关系中获取价值。 Laravel

时间:2017-01-24 07:38:25

标签: php laravel-5.2 one-to-many

我有两种型号的车辆和图像, 车辆有很多图像

public function images(){
    return $this->hasMany('App\Image');
}

图片属于一辆车:

public function vehicle(){
    return $this->belongsTo('App\vehicle');
}

我检索过的车辆如下: 在控制器中:

$ads=ads::orderBy('views','desc')->get();
foreach ($ads as $ad) {
    $popularvehicles[]=vehicles::where('id',$ad->Vehicleid)->get()->toArray();
}

查看:

@foreach($popularvehicles as $popularvehicle)
     @foreach($popularvehicle as $vehicle)
      {{$vehicle['vname']}}
     @endforeach
@endforeach

现在,我想要检索属于$ vehicle的图像。 我尝试过以下语法:

@foreach($popularvehicles as $popularvehicle)
     @foreach($popularvehicle as $vehicle)
          @foreach($vehicle->image as $image)
             <a href="page-product-details.html">
             <img src="{{ asset("images/$image->title") }}" alt="{{ $image->title }}" >
             </a>
          @endforeach
     @endforeach
@endforeach

但它抛出了一个例外:试图获得非对象的属性。 我能做些什么来做对吗?

2 个答案:

答案 0 :(得分:0)

一个简单的例子:
你有一个模型,模型在另一个模型中有详细信息。

class Vehicle extends Model
{
    protected $fillable = [
        'brand',
        'etc',
    ];

    public function details()
    {
        return $this->belongsToMany('App\VehicleDetails');
    }
}

细节模型:

class VehicleDetails extends Model
{
    protected $fillable = [
        'color',
        'engine',
    ];

    public function vehicle() {
        return $this->belongsTo('App\Vehicle');
    }

}

我通常使用变换器来返回所需的数据,但您不必这样做。要使用hasMany,您可以这样称呼它:

return Vehicle::find($vehicleId); // Retrieve the vehicles from the server
// the object retrieved has the details.
$vehicle->details; // then you can use contains the details

   // example:
    @foreach($vehicle->details as $details)
      <a href="page-product-details.html">
        <img src="{{ asset("images/$details->imagetitle") }}"
          alt="{{ $details->title }}" >
      </a>
    @endforeach

返回的对象包含详细信息,您可以根据需要循环播放。
如果没有关于如何检索数据的更多细节,我就不能更具体了。

答案 1 :(得分:0)

我可以看到2个问题;
您的热门车辆是一个数组阵列

$popularvehicles[]=vehicles::where('id',$ad->Vehicleid)->get()->toArray();

toArray正在将所有内容变成数组。您不再拥有Vehicle对象。 https://laravel.com/docs/5.2/collections#method-toarray

使用 - &gt; all()代替。

第二个问题

@foreach($vehicle->image as $image)

您想使用$ vehicle-&gt; image s