Можно ли таким образом получить имя значения из связанной таблицы - PullRequest
0 голосов
/ 09 октября 2019

Хорошо, поэтому мне нужно получить данные из таблицы таким способом, но я бы тоже хотел получить имя Vehicle Maker

Я пытался использовать соединение или просто делал auth()->user()->vehicles->VehicleMaker, но это не работает

Миграция настольного транспортного средства

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();
});

Миграция vehicle_makers

Schema::create('vehicle_makers', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->timestamps();
});

Контроллер

public function show(){

    $vehicles = auth()->user()->vehicles; -- what shoul i add here

    return view('/home', [
       'vehicles' => $vehicles
    ]);
}

Редактировать Я забыл упомянуть, что у меня уже были отношения, и они работают в ремесленном мастерстве, когда я пытаюсь сделать что-то вроде этого: Vehicles->find(1)->VehicleMaker Я хочу сделать это auth()->user()->vehicles и получите транспортное средство с именем vahicle_maker, а не id, так что какое-то соединение, которое будет работать в этом случае

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Должны быть отношения между пользователем и транспортными средствами, а не отношения между транспортными средствами и vehicle_makers. Если вы уже создали свои модели (Vehicle, VehicleMaker) с их миграциями, вы можете сделать следующее

//add this to your User model.

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

// add this to your Vehicle model

public function user(){
    return this->hasMany(App\Vehicle); // implying that a user can have many vehicles
}

//add this to your vehicleMaker model

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

Когда это будет сделано, вы можете использовать ленивую загрузку Laravel для получения отношений. Вы можете сделать что-то вроде

$vehicles = auth()->user()->vehicle
   return view('/home', [
   'vehicles' => $vehicles
]);
0 голосов
/ 09 октября 2019

Хорошо, основаны на Laravel Model Relationship .

Сначала необходимо создать migration.

Vihicle 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().

В вашей модели вы должны указать, какое судно отношений вы будете использовать. ,В вашем случае я предположил, что вы используете Отношение один ко многим . Чтобы ваша пользовательская модель выглядела следующим образом:

Пользовательская модель

...
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.

Контроллер

$vehicles = auth()->user()->vehicles;

dd($vehicles);

INFO

Вы также можете обратиться к этому учебнику .

РЕДАКТИРОВАТЬ

Контроллер

$vehicles = auth()->user()->vehicles();

foreach($vehicles as $vehicle) {
 dd($vehicle->VehicleMaker);
}

Примечание: $vehicles возвращает массив объектов. Таким образом, вы можете выполнить цикл через foreach loop, чтобы выбросить один экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...