【问题标题】:Understanding Eloquent in Laravel在 Laravel 中理解 Eloquent
【发布时间】:2016-12-29 06:29:11
【问题描述】:

以前我使用过标准的 PHP,最近我转向了 Laravel。我无法掌握的一件事是 Laravel Eloquent 中的 SQL 查询。

例如,我有一个 roles 和一个 users 表。角色表包含​​每个角色的角色和 ID。 users 表包含各种用户详细信息以及用于引用用户角色的 role_id

我在我的用户模型

中尝试了什么
public function role()
{
    // return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
    return $this->hasOne('App\Role', 'id', 'role_id');
}

我在角色模型

中的尝试
public function users()
{
    return $this->hasMany('App\User', 'role_id', 'id');
}

然后在我的控制器

public function index()
{
    $var = User::find()->role->get();

    return view('article', 
        array(
        'var' => $var
        ));
}

但是现在我如何像在普通 PHP 中一样访问两个表中的字段?我宁愿使用标准 SQL,但正在尝试正确学习这个框架。

有什么建议吗?

【问题讨论】:

  • 更改为hasOne('App\Role', 'role_id', 'id');,但实际上您可以省略这些键,而 eloquent 会根据您的情况猜测它们。
  • 告诉我你想要角色和用户之间的关系(1-1,1-n,n-n)。我给你举个例子
  • 我会使用belongsTo('App\Role') 来表示role() 关系。这就是在 many 端建模一对多关系的方式。

标签: php laravel eloquent


【解决方案1】:

您可以通过 eloquent 模型属性访问表字段。

如果您有 nameemail 之类的字段,您可以像这样获取它们

$user = User::find(1);

$name = $user->name;
$email = $user->email;

$roleName = $user->role->name;

请注意,您实际上不必在关系上调用get() 方法。访问它会自动调用它。

Laravel 文档在这个问题上非常有帮助。 Laravel 5.2 Eloquent: Getting StartedLaravel 5.2 Eloquent: Relationships

【讨论】:

    【解决方案2】:

    用急切加载试试

    $var = User::with('role')->find($userId)->get();
    

    【讨论】:

    • 如果我这样做然后使用foreach循环,如果我有同名的列,它如何区分两者?
    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2020-01-31
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多