laravel eloquent 迁移

laravel eloquent migrations

在laraveleloquent关系中,已经有数据库了还需要迁移吗?初学者。

我在我的模型中创建了一个一对一的 eloquent 关系,以从另一个 table 的记录中获取特定的列并获取数据 table,但是它没用。

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Directorystatus extends Model
{
    use HasFactory;

    protected $table = 'user_status';
    protected $fillable = ['status_id' , 'status_xtitle'];

    public function userbasic() {
        return $this->belongsTo(directorybasic::class,'user_xusern','status_xuser');
    }
}

class Directoryuser extends Model
{
    use HasFactory;

    protected $table = 'user_basic';
    protected $primaryKey = 'user_id';
    protected $fillable = ['user_id' , 'user_xusern' , 'user_xfirtname' ,'user_xmiddlename','user_xlastname'];

    public function userstatus() {
        return $this->hasOne(directorystatus::class,'user_xusern','status_xuser');
    }
}

没有。迁移不是必需的。如果您不需要两者,则也没有必要在两侧定义关系。 (你可以只有 belongsTo,没有 hasOne 或 hasMany 在相反的模型中。)

首先,确保您使用的是正确的对象(Directorystatus::class / Directoryuser:class - 我发现它们在您的代码中没有大写)。下一个参数是外键,表示指向模型主键的列。第三个参数是可选的,仅当主键不是 id.

时才使用

例如,如果您在 table user_status 中有一个列 status_xuser,其中包含来自 user_basic table 的 user_id,你应该这样定义它:

public function userbasic() {
    return $this->belongsTo(Directoryuser::class,'status_xuser','user_id');
}

为了使用这种关系,例如,当您从数据库中检索模型时,您应该以与命名关系函数相同的方式调用它。

$status = Directorystatus::find(1);
$user = $status->userbasic();

我还建议您以驼峰命名法命名您的 classes,因为这是公认的做法(尤其是在 Laravel 中)。