Laravel 的雄辩关系和 MySQL 的外键——belongsTo 不会产生关系

我认为我对 Laravel 雄辩的关系(版本 7)有误解。


主要问题是:它们需要 MySQL 外键才能工作吗?双向都需要 FK 吗?


情况:我有用户,我有帐户。每个用户有一个帐户,每个帐户属于一个用户。


用户迁移:


class CreateUsersTable extends Migration

{

    public function up()

    {

        Schema::create('users', function (Blueprint $table)

        {

            $table->id();

            $table->string('name');

            $table->string('email')->unique();

            $table->string('password');

            $table->rememberToken();

            $table->timestamp('updated_at');

            $table->timestamp('email_verified_at')->nullable();

            $table->timestamp('created_at')->useCurrent();

        });

    }

}

账户迁移:


class CreateAccountsTable extends Migration

{

    public function up()

    {

        Schema::create('accounts', function (Blueprint $table)

        {

            $table->id('owner');

            $table->bigInteger('currency');

            $table->integer('currencyGenerators');

            $table->foreign('owner')->references('id')->on('users');

            $table->timestamp('updated_at');

            $table->dateTime('lastResourceUpdate')->nullable()->useCurrent();

            $table->timestamp('created_at')->useCurrent();

        });

    }

}

因此,我有一个引用 users.id 的 MySQL FKcounts.owner。


用户型号:


class User extends Authenticatable

{

    ...

    

    public function account(): HasOne

    {

        return $this->hasOne(Account::class, 'owner');

    }

}

账户模型:


class Account extends Model

{

    ...


    public function user(): BelongsTo

    {

        return $this->belongsTo(User::class, 'id');

    }

}

我可以检索用户的帐户:


$users = User::all();

dd($users[0]);


App\User {#1030 ▼

#primaryKey: "id"

...

#relations: array:1 [▼

"account" => App\Account {#1185 ▶}

]

...

但我无法获取该帐户的用户:


$accounts = Account::all();

dd($accounts[0]);


App\Account {#1241 ▼

    #primaryKey: "owner"

    ...

    #relations: array:1 [▼

    "user" => null

    ]

    ...

我的用户表中是否需要一个 FK 来引用帐户的所有者?(因为 Laravel 的文档return $this->hasOne('App\Phone', 'foreign_key');在https://laravel.com/docs/7.x/eloquent-relationships#introduction中提到。


或者我这里的问题是什么?


喵喔喔
浏览 59回答 1
1回答

慕姐4208626

您必须在帐户模型中使用“所有者”列return $this->belongsTo(User::class, 'owner','id');
打开App,查看更多内容
随时随地看视频慕课网APP