【问题标题】:Laravel Eloquent Model hasMany Error "Illuminate\Database\Eloquent\Relations\HasMany could not be converted to string"Laravel Eloquent 模型 hasMany 错误“Illuminate\Database\Eloquent\Relations\HasMany 无法转换为字符串”
【发布时间】:2019-11-16 05:41:36
【问题描述】:

我创建了一个 Eloquent 模型:

class VehicleDetails extends Model
{
    //
    protected $table = 'v_vehicle_details';

    protected $primaryKey = 'model_id';

    public function tariffs()
    {
        return $this->hasMany('App\Tariffs', 'vehicle_model_id', 'model_id');
    }


}

v_vehicle_details 的表结构也一样

v_vehicle_details

关税表结构是

t_tariffs

模型在控制器中被调用,例如:

public function booking_view(){

        $vehicle_details = new VehicleDetails();
        return $vehicle_details->find(5)->tariffs();
}

我需要的是获取所有关税的车辆详细信息,但是当我尝试它时会引发错误Illuminate\Database\Eloquent\Relations\HasMany 无法转换为字符串。有人可以帮忙吗,我是 laravel 的新手。

这些不是实际的表格,而是视图。

【问题讨论】:

  • 你试过什么来调试这个问题? “试试看”是什么意思?哪一行会抛出该错误消息?

标签: php laravel eloquent


【解决方案1】:

改成

return VehicleDetails::with('tariffs')->find(5);

【讨论】:

  • 现在错误消失并得到结果。感谢您的帮助
【解决方案2】:

这是因为在这种情况下调用->tarrifs() 方法将返回一个关系对象HasMany,这意味着您仍然需要对该对象执行查询才能获得结果。

如果您将其用作属性->tarifs 而没有(),它将执行查询。 这与tarifs()->get() 相同,只是一个快捷方式。

【讨论】:

    【解决方案3】:

    将您的功能更改为:

    public function bookingView(){
            $vehicle = VehicleDetails::with('tariffs')->find(5);       
             return view('your.view', compact('vehicle'));
    }
    

    with()eager load关税关系。

    您可以像这样在视图中访问您的关税:

    {{$vehicle->tariffs->anyAttributeYouWantToAccess}}
    

    【讨论】:

    • 嗨卢卡斯。查找触发查询。在那之后它现在是一个集合,你不能在集合上运行with。你需要交换findwith
    猜你喜欢
    • 2016-01-01
    • 2019-08-12
    • 2020-05-04
    • 2018-11-19
    • 2021-06-07
    • 2020-12-01
    • 2020-05-13
    • 2016-05-13
    • 2022-01-24
    相关资源
    最近更新 更多