这样可以从相关表中获取值名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这样可以从相关表中获取值名称相关的知识,希望对你有一定的参考价值。
好,所以我需要以这种方式从表中获取数据,但我想获取车辆制造商名称也]
我尝试使用join或只是做uth()-> user()->车辆-> VehicleMaker,但它不起作用
//Migration
Example of Table Vehicle
Schema::create('vehicles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('user_id');
$table->bigInteger('category_id');
$table->bigInteger('vehicle_maker_id');
$table->string('name');
$table->double('price', 8 , 2);
$table->year('manufacture_year');
$table->bigInteger('mileage');
$table->string('vehicle_image');
$table->boolean('admin_verification')->nullable();
$table->timestamps();
});
Example of Table Vehicle
Schema::create('vehicle_makers', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->timestamps();
});
//Controller
public function show(){
$vehicles = auth()->user()->vehicles; -- what shoul i add here
return view('/home', [
'vehicles' => $vehicles
]);
}
好的,基于Laravel Model Relationship。
您首先需要创建一个migration
。
车辆迁移
Schema::create('vehicles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('category_id');
$table->unsignedBigInteger('vehicle_maker_id');
$table->string('name');
$table->double('price', 8 , 2);
$table->year('manufacture_year');
$table->bigInteger('mileage');
$table->string('vehicle_image');
$table->boolean('admin_verification')->nullable();
$table->timestamps();
});
我使用
unisignedBigInteger
确定它是外键,或者您也可以使用index()
。
在模型中,您应该放置将使用的关系船。在您的情况下,我假设您正在使用One To Many Relationship。这样您的用户模型应如下所示:
用户模型
...
public function vehicles() {
return $this->hasMany(Vehicle::class);
}
以便您可以使用约定
auth()->user()->vehicles;
。注意:
auth()->user()->vehicles;
返回一个array of object
,您可以在foreach
中循环它。
车辆型号
public function user() {
return $this->belongsTo(User::class);
}
在您的模型中拥有此功能时,可以使用2种方式。
在您的控制器中,您可以调用这2个的关系。
Controller
$vehicles = auth()->user()->vehicles;
dd($vehicles);
INFO
您也可以参考此tutorial。
使用者和车辆之间应该有一种关系,而车辆和车辆制造商之间应该有另一种关系。如果您已经使用迁移创建了模型(Vehicle,VehicleMaker),则可以执行以下操作
//add this to your User model.
public function vehicle(){
return this->belongsTo(AppVehicle);
}
// add this to your Vehicle model
public function user(){
return this->hasMany(AppVehicle); // implying that a user can have many vehicles
}
//add this to your vehicleMaker model
public function vehicle(){
return this->belongsTo(AppVehicle);
}
完成后,您可以使用Laravel的延迟加载来获取关系。您可以执行类似的操作
$vehicles = auth()->user()->vehicle
return view('/home', [
'vehicles' => $vehicles
]);
以上是关于这样可以从相关表中获取值名称的主要内容,如果未能解决你的问题,请参考以下文章
SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]
从 2 个不同片段的 sqlite 中的 2 个表中获取信息
使用 Jquery 使用正则表达式从 HTML 表中获取所有数据
如何从Drupal Commerce中的国家/地区代码获取国家/地区名称