首页 > 解决方案 > Laravel 8 - 将数据存储为 JSON 并检索关系

问题描述

我有一个表单,允许用户为自己预订车辆(SchemeVehicle),并在这样做时通过 SchemeVehicleLog 模型将日志条目写入数据库。当向自己签出车辆时,用户还可以将车辆签出给作为车辆的“第二驾驶员”的另一用户。

当字段 (second_responder) 只是一个仅允许单个值的下拉菜单但我想更改此表单以便它现在接受多选选项时,这很有效 - 允许用户选择多个用户。

数据存储为 JSON 并且可以解码回一个数组 - 但我遇到的问题是访问关系。我以前可以(当只存储一个值时)做

$second_responder->User2->first_name

这将返回“第二个驱动程序”的名字,但现在它通过 json_encode 存储,这会导致错误。

试图获取非对象的属性“User2”

任何建议将不胜感激!

控制器

public function SchemeVehicleBookoutList()
{
    $pagetitle = "Scheme Vehicle Bookout Log";
    $logs = SchemeVehicleLog::whereHas('SchemeVehicle', function ($q){
        $q->where('vehicle_sid', Auth::user()->sid);
    })->orderByRaw('-return_date','desc')->orderBy('signout_date', 'desc')->get();

    return view('equipment.schemevehiclesignouts', compact('pagetitle', 'logs'));
}

模型

class SchemeVehicleLog extends Model {
protected $table = 'scheme_vehicles_log';
protected $primaryKey = 'log_id';

use SoftDeletes;

protected $fillable = ['log_id','signout_date','primary_responder','secondary_responder','signout_mileage','fluid_levels','road_worthy','tyres', 'signout_additional_notes', 'return_date', 'return_mileage', 'return_additional_notes'];


public function SchemeVehicle()
{
    return $this->belongsTo('App\SchemeVehicle', 'scheme_vehicle_id', 'vehicle_id')->withTrashed();
}

public function User1()
{
    return $this->hasOne('App\User', 'uid', 'primary_responder');
}

public function User2()
{
    return $this->hasOne('App\User', 'uid', 'second_responder');
}

}

标签: phplaravel

解决方案


推荐阅读