Laravel 8种子属性[id]在Eloquent生成器实例上不存在



我正在为一个客户重建一个旧项目,并将其迁移到Laravel 8。我已经创建了所有的模型,并将当前项目中的所有数据转换为json,这样我就可以将数据作为种子数据进行迁移。

我有一个与CarUser模型具有belongsTo关系的Usercar模型。我需要在播种过程中通过比较和匹配旧的id值来重新创建关系,以便创建新的记录和关系。我的所有种子程序都能成功运行,直到我到达**UsercarSeeder**,然后我得到一个property [id] does not exist on the Eloquent builder instance错误。我知道我错过了一些非常简单的事情。谢谢

数据库/data/cars.json

[
{
"old_car_id": 31,
"start_year": 1955,
"end_year": 1958,
"model": "356  Carrera 1500 GS Coupe",
"horse_power": 110,
...

database/data/users.json

[
{
"old_user_id": "4be7c3a7-d626-456a-83be-5d303bf90d02",
"first_name": "Charles",
"last_name": "Smith",
...

数据库/数据/用户汽车.json

[
{
"old_user_id": "4be7c3a7-d626-456a-83be-5d303bf90d02",
"old_car_id": 227,
"car_color": "Gray",
"year": 2015,
"tire_points": 140,
...

数据库/seeders/UsercarSeeder.php

<?php
namespace DatabaseSeeders;
use AppModelsUser;
use AppModelsCar;
use AppModelsUsercar;
use IlluminateDatabaseSeeder;
use IlluminateSupportFacadesDB;
class UsercarSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$json = file_get_contents('database/data/user-cars.json');
$data = json_decode($json);
$user = User::where('old_user_id', 'old_user_id')->get();
$car = Car::where('old_car_id', 'old_car_id')->get();
foreach ($data as $obj) {
Usercar::create(array(
'user_id' => $user->id,
'car_id' => $car->id,
...

get()方法返回一组模型。如果您需要一个对象,则应该使用first()方法。

此外,where()应该看起来像:

->where($column, $value)

看起来您传递了两次列名,这可能会返回一个空集合。

最新更新