【问题标题】:Eloquent Model has parent modelEloquent 模型有父模型
【发布时间】:2015-10-28 01:54:00
【问题描述】:

我有一个名为 User 的模型,其中包含名称、国家和一些关系等内容。

现在我想要一个模型,例如供应商,拥有与用户相同的所有功能和变量,包括更多内容

我想我可以这样做:

class User extends Model implements AuthenticatableContract
{

    use Authenticatable; SoftDeletes;

    protected $dates = ['deleted_at', 'last_login'];

    protected $fillable = [
        'name',
        'password',
        'country',
    ];

    protected $hidden = ['password'];

    public function logs()
    {
        return $this->hasMany('App\Log');
    }
}

以及供应商模型:

class Vendor extends User
{
    protected $fillable = [
        'description'
    ];

    public function user() {
        return $this->belongsTo('App\User');
    }

    public function products()
    {
        return $this->hasMany('App\Product', 'vendor_id');
    }

Controller 检查用户的角色并加载用户模型或供应商模型:

if(Auth::user()->role > 1)
    $user = Vendor::where('user_id', Auth::user()->id)->first();
else
    $user = Auth::user();
return $user->load('logs');

但供应商的加载调用失败。我能够加入供应商内部用户的字段,但我还需要它的功能。

【问题讨论】:

  • 尝试为供应商加载日志时遇到什么错误?
  • Column not found: 1054 Unknown column 'logs.vendor_id' in 'where 子句' (SQL: select * from logs where logs.vendor_id in (1)),但我修好了。

标签: laravel model eloquent subclass


【解决方案1】:

问题是日志函数检查了一个不存在的字段。 使用此功能有效:

public function logs()
{
    return $this->hasMany('App\Log', 'user_id', get_called_class() !== get_class() ? 'user_id' : 'id');
}

【讨论】:

    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 2015-03-12
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多