【问题标题】:Laravel's eloquent relationships and MySQLs foreign keys - belongsTo not resulting in a relationshipLaravel 雄辩的关系和 MySQL 的外键——belongsTo 不产生关系
【发布时间】:2020-12-14 00:35:29
【问题描述】:

我认为我对 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();
        });
    }
}

因此我有一个 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
    ]
    ...

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

或者我的问题是什么?

【问题讨论】:

  • 您必须在 Account 模型中使用 'owner' 列 return $this->belongsTo(User::class, 'owner','id');
  • @sohailansari 这实际上似乎起到了作用 oO 虽然我不确定这有什么意义。但我想我在理解关系方面遇到了问题。你会键入答案吗?我会接受的。

标签: php mysql laravel-7


【解决方案1】:

您必须在帐户模型中使用“所有者”列

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

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2018-11-28
    相关资源
    最近更新 更多