用户模型
class UserModel extends Authenticatable
{
use Notifiable;
public $table = 'tbluser';
public $primaryKey = 'UserID';
public $timestamps = true;
public function Role() {
return $this->hasOne("\App\Models\User\Role\RoleModel", "RoleID", "RoleID");
}
}
角色模型
class RoleModel extends Model
{
public $table = 'tblrole';
public $primaryKey = 'RoleID';
public $timestamps = false;
}
我的代码位于下面,它从两个表中获取所有列。下面的代码显示了用户表中的所有列以及关系表中的所有列 - 角色
$data = UserModel::with("Role")->get();
我在下面的代码中尝试从两个表中选择几列。
$data = UserModel
::select("UserName", "EmailAddress", "LastName")
->with(['Role' => function ($q) {
$q->select('Role')
}])
->get();
但没有奏效。它显示了用户表中预期的三列,但没有关联记录的角色表中的信息。
什么遗失?
答案 0 :(得分:3)
在with
电话中,您需要从Role
模型中选择主键,以便在查询后检索角色时附加角色。除此之外,在传递给with
方法的闭包中选择你想要的任何其他列:
$data = UserModel::select("UserName", "EmailAddress", "LastName")
->with(['Role' => function ($q) {
$q->select('RoleID', 'Role', 'OtherColumn')
}])
->get();
然后您可以通过以下方式访问用户和角色:
// This will return the first user
$user = $data->first();
// This returns the entire user role model with the selected columns
$role = $user->Role;
// Access Role attributes through the Role Model
$role->Role;
答案 1 :(得分:1)
我想你可以试试这个:
$data = UserModel
::select("UserName", "EmailAddress", "LastName")
->with(['tblrole' => function ($q) {
$q->select('Role')
}])
->get();
或强>
$data = DB::table('tblrole')->select('tblrole.*','tbluser.UserName','tbluser.EmailAddress','tbluser.LastName')
->join('tbluser','tbluser.id','=','tblrole.user_id')
->get();
希望这会对你有所帮助。
答案 2 :(得分:0)
在 with 的select(....)中添加与tblUser表的主键相关的tblRole表的外键。 然后列出您要获取的所有其他列。
$data = UserModel
::select("UserName", "EmailAddress", "LastName")
->with(['Role' => function ($q) {
$q->select('RoleID', 'Role')
}])
->get();