目前我有两张桌子;用户和员工
所有用户都是员工,但并非所有员工都是用户,
我有一个模型Users
和Employee
,用户的个人详细信息会被拉出他们各自的员工记录。
现在我想显示所有用户,我可以使用User::all();
来完成
但我也希望得到他们的个人资料。
目前,我正在DB::
调用我的用户模型中的函数中的表。
有更好的方法吗?
答案 0 :(得分:2)
你可以用Laravel的方式 - 渴望加载关系
$users = User::with('employee')->get();
这假定您已定义了您的关系,至少在User
方面。
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Employee;
class User extends Authenticatable
{
// ...
public function employee()
{
return $this->hasOne(Employee::class, 'employee_no');
}
}
仅供参考,Laravel方式并不一定意味着最快或最好的方式。它通常在语法上更加昂贵/简洁且方便。
急切加载关系需要额外的查询。在您的情况下,将在引擎盖下执行两个查询,然后将为集合中的每个User
模型实现employee属性。
因此,使用join
和数据库往返一次的方式在一天结束时可能会更高效。
答案 1 :(得分:1)
你应该建立一种关系。在这种情况下,您的用户可以与您的员工建立联系
public function employee()
{
return $this->hasOne(Employee::class);
}
使用Eloquent,您可以在User
模型中定义方法来访问关系并完成它。
public function role
{
return $this->employee->role;
}
但是,在提取用户时,您需要确保“急切加载”#34;您的员工关系,以便您在使用这些方法时不会单独提取员工。当您提取用户时:
User::with('employee')->all()
如果您始终需要员工记录,则默认情况下您可以急切加载:
class User extends Authenticatable
{
protected $with = ['employee'];
}
答案 2 :(得分:1)
听起来你需要使用Eloquent One to One Relationship
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function employee()
{
return $this->hasOne('App\Employee');
}
}