在laravel雄辩的关系中,即使有一个现有的数据库,是否仍有必要进行迁移?新手来了。
我在我的模型中创建了一对一的关系,以便从另一个表的记录中获取特定的列,并将其提取到datatable,但是它没有工作。
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');
}
}发布于 2022-05-19 05:16:21
不是的。迁移是不必要的。定义双方的关系也是没有必要的,如果你不需要两者。(您只能使用belongsTo,而不需要在相反的模型中使用hasOne或hasMany。)
首先,确保您正在使用正确的对象(Directorystatus::class / Directoryuser:class -我看到它们在代码中没有大写)。下一个param是外键,意思是指向模型主键的列。第三个param是可选的,仅当主键不是id时才使用。
例如,如果表status_xuser中有一个列user_status,其中包含来自user_basic表的user_id,那么您应该像这样定义它:
public function userbasic() {
return $this->belongsTo(Directoryuser::class,'status_xuser','user_id');
}为了使用这种关系,例如,当从db检索模型时,您应该以命名关系函数的方式调用它。
$status = Directorystatus::find(1);
$user = $status->userbasic();我还建议您在camelCase中命名您的类,因为这是公认的实践(特别是在Laravel中)。
https://stackoverflow.com/questions/72298266
复制相似问题