Laravel 的 eloquent 关系和 MySQL 的外键 - belongsTo 不会产生关系

Laravel's eloquent relationships and MySQLs foreign keys - belongsTo not resulting in a relationship

我想我对 Laravel 的 eloquent 关系(版本 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();
        });
    }
}

因此我有一个 MySQL FK accounts.owner 引用 users.id.

用户模型:

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

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

或者我的问题是什么?

您必须使用帐户模型中的 'owner' 列

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