Laravel:一个模型中的多个表

时间:2018-06-10 18:23:35

标签: laravel laravel-5

我为用户提供了以下模型:

alias meson="~/.local/bin/meson"

用户在许多表中都有不同的信息

  • 用户信息,如姓名,办公室,仪表板,2FA等

我现在的方式“最佳做法”(如class User extends Authenticatable { use Notifiable; protected $table = 'login_info'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function getDashboards() { return \DB::table('dashboard') ->select('type') ->where('id', Auth::id()) ->orderBy('column', 'asc') ->get(); } } 函数)是否可以从不同的表中获取信息?

或者我应该为每个表格创建一个模型,然后为每个表格“加入它们”getDashboardshasMany等等)?

修改

我现在正在使用模型,但查询结果总是一个空数组。

belongsToMany

class Dashboard extends Model { protected $table = 'dashboard'; public function user() { return $this->belongsTo(User::class,'user_id','id'); //user_id } } 是login_info表中使用的用户的id。

在User类中我有:

user_id

在登录控制器中我有:

public function dashboards()
{
    return $this->hasMany(Dashboard::class,'id','user_id');
}

任何人都能看到问题所在?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

更多的Laravel方法是创建相关的Dashboard模型并使用雄辩的关系,并利用ORM的功能。如果您总是需要在该列上进行排序,那么在关系中包含orderBy没有错。

class User extends Authenticatable
{
    public function dashboards()
    {
        return $this->hasMany(Dashboard::class)
            ->orderBy('column', 'asc');
    }
}

class Dashboard extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

答案 1 :(得分:1)

public function dashboards()
{return $this->hasMany(\App\Dashboard::class);
}

在您的仪表板模型中,您可以这样做

protected $casts = [
        'user_id' => 'int',
    ];
public function user()
    {
        return $this->belongsTo(\App\User::class);
    }

答案 2 :(得分:0)

您无需在模型中执行任何操作!只需参考控制器中的模型,例如:

User::where('id', Auth::id())->pluck('type');