从belongsTo()Laravel 5获取值
我对Laravel 5和雄辩有点问题。我有3个模型userInfo、tasksAssign和taskscreated。 用户模型:从belongsTo()Laravel 5获取值,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我对Laravel 5和雄辩有点问题。我有3个模型userInfo、tasksAssign和taskscreated。 用户模型: public function tasksAssign() { return $this->hasMany('App\Tasks', 'fk_user_id_assign', 'id')->where('status', 2); } public function tasksCreated() { return $this->ha
public function tasksAssign()
{
return $this->hasMany('App\Tasks', 'fk_user_id_assign', 'id')->where('status', 2);
}
public function tasksCreated()
{
return $this->hasMany('App\Tasks', 'fk_user_id_created', 'id');
}
任务模型
public function userInfo()
{
return $this->belongsTo('App\User');
//return $this->hasOne('App\User', 'id', 'id'); The hasOne here is just me testing diffrent stuff to see if i could get it to work.
}
我应该能够从我的用户(URL中的id=id)获取值,并用belongsTo()显示在我的tasks show视图中吗?像这样:{{$tasks->userInfo->name}
或者我完全离开这里了
更新: 当前任务控制器:
public function show($id)
{
$tasks = Tasks::findOrFail($id);
$assignee = $tasks->assignee;
return view('tasks.show')->withTasks($tasks);
}
我的观点是{{$tasks->assignee}},但它没有显示任何内容,我也在尝试获取assignee的信息,但是感谢所有的示例,稍后它们将非常有用。
模型:
public function assignee() {
return $this->belongsTo('App\User', 'fk_user_assign_id', 'id');
}
好吧,我假设你的模式是这样的:
Schema::create('user', function($table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
Schema::create('task', function($table) {
$table->increments('id');
$table->integer('fk_user_id_assign')->unsigned();
$table->foreign('fk_user_id_assign')->references('id')->on('user');
$table->integer('fk_user_id_created')->unsigned();
$table->foreign('fk_user_id_created')->references('id')->on('user')
$table->timestamps();
});
在英语中,一个任务有一个创建者,也有一个助手。我不确定您正试图使用->userInfo()
关系访问哪一个,因此我将描述访问这两个关系的方法
由于您没有使用名称user\u id
作为task
表上的外键,因此需要指定要从中加载用户的外键
class User extends Eloquent {
public function createdTasks() {
return $this->hasMany(Task::class, 'fk_user_created_id', 'id');
}
public function assignedTasks() {
return $this->hasMany(Task::class, 'fk_user_assign_id', 'id');
}
}
class Task extends Eloquent {
public function creator() {
return $this->belongsTo(User::class, 'fk_user_created_id', 'id');
}
public function assignee() {
return $this->belongsTo(User::class, 'fk_user_assign_id', 'id');
}
}
要获取给定用户创建的所有任务,请使用
$tasksCreatedByUser = $user->createdTasks;
$tasksAssignedToUser = $user->assignedTasks;
要获取分配给给定用户的所有任务,请使用
$tasksCreatedByUser = $user->createdTasks;
$tasksAssignedToUser = $user->assignedTasks;
要向用户获取由创建的任务,请使用
$creator = $task->creator;
要向用户分配任务,请使用
$assignee = $task->assignee;
最后,如果您想列出用户创建的每个任务的受让人,请执行以下操作
$tasksCreatedByUser = $user->createdTasks;
foreach($tasksCreatedByUser as $task) {
$assignee = $task->assignee;
echo "Task #{$task->id} was created by user #{$user->id} and assigned to user #{$assignee->id}\n";
}
如果父模型具有
->hasOne()
或->hasMany()
关系,则子模型必须具有互补的->belongsTo()
关系。在本例中,父模型是用户
模型,子模型是任务
模型。好的,我假设您的模式如下:
Schema::create('user', function($table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
Schema::create('task', function($table) {
$table->increments('id');
$table->integer('fk_user_id_assign')->unsigned();
$table->foreign('fk_user_id_assign')->references('id')->on('user');
$table->integer('fk_user_id_created')->unsigned();
$table->foreign('fk_user_id_created')->references('id')->on('user')
$table->timestamps();
});
在英语中,一个任务有一个创建者,也有一个助手。我不确定您正试图使用->userInfo()
关系访问哪一个,因此我将描述访问这两个关系的方法
由于您没有使用名称user\u id
作为task
表上的外键,因此需要指定要从中加载用户的外键
class User extends Eloquent {
public function createdTasks() {
return $this->hasMany(Task::class, 'fk_user_created_id', 'id');
}
public function assignedTasks() {
return $this->hasMany(Task::class, 'fk_user_assign_id', 'id');
}
}
class Task extends Eloquent {
public function creator() {
return $this->belongsTo(User::class, 'fk_user_created_id', 'id');
}
public function assignee() {
return $this->belongsTo(User::class, 'fk_user_assign_id', 'id');
}
}
要获取给定用户创建的所有任务,请使用
$tasksCreatedByUser = $user->createdTasks;
$tasksAssignedToUser = $user->assignedTasks;
要获取分配给给定用户的所有任务,请使用
$tasksCreatedByUser = $user->createdTasks;
$tasksAssignedToUser = $user->assignedTasks;
要向用户获取由创建的任务,请使用
$creator = $task->creator;
要向用户分配任务,请使用
$assignee = $task->assignee;
最后,如果您想列出用户创建的每个任务的受让人,请执行以下操作
$tasksCreatedByUser = $user->createdTasks;
foreach($tasksCreatedByUser as $task) {
$assignee = $task->assignee;
echo "Task #{$task->id} was created by user #{$user->id} and assigned to user #{$assignee->id}\n";
}
如果父模型具有
->hasOne()
或->hasMany()
关系,则子模型必须具有互补的->belongsTo()
关系。在这种情况下,父模型是用户
模型,子模型是任务
模型。假设在任务
表中有一个用户id
字段,其中用户id
应参考用户
表中的id
列,例如:
//App\Task.php
公共函数userInfo()
{
//Laravel将假定“用户id”(fk)在任务表中可用
返回$this->belongsTo('App\User');
}
或者,您可以使用以下方式明确告知本地密钥名称
:
//App\Task.php
公共函数userInfo()
{
返回$this->belongsTo('App\User','u指向用户表的\u键');
}
您假设在任务
表中有一个用户id
字段,其中用户id
应参考用户
表中的id
列,例如:
//App\Task.php
公共函数userInfo()
{
//Laravel将假定“用户id”(fk)在任务表中可用
返回$this->belongsTo('App\User');
}
或者,您可以使用以下方式明确告知本地密钥名称
:
//App\Task.php
公共函数userInfo()
{
返回$this->belongsTo('App\User','u指向用户表的\u键');
}
当您使用belongsTo
时,Laravel将假定伪造密钥为“table\u id”
当使用haseOne
或hasMany
Laravel时,它将假定为带有s
然后,要指定您自己的选择,您需要这样做
public function userInfo(){
return $this->belongsTo('App\User', 'your_onw_key');
}
当您使用
belongsTo
Laravel时,将假定forgein键为“table\u id”
当使用haseOne
或hasMany
Laravel时,它将假定为带有s
然后,要指定您自己的选择,您需要这样做
public function userInfo(){
return $this->belongsTo('App\User', 'your_onw_key');
}
用户ID存储在tasks表中的列的名称是什么?fk_user_assign_ID是tasks表中的一个。我不知道这是您的实际代码中的输入错误,还是问题中的输入错误,但在您的
hasMany
中,fk字段名为fk_user_ID_assign
,但是在下面的to
中,您将其作为fk\u user\u assign\u id
。谢谢!)用户ID存储在tasks表中的列的名称是什么?fk_user_assign_ID是tasks表中的一个。我不知道这是您的实际代码中的输入错误,还是问题中的输入错误,但在您的hasMany
中,fk字段名为fk_user_ID_assign
,但是在下面的to
中,您将其作为fk\u user\u assign\u id
。谢谢!)所以我想我也开始赶上来了,编辑了我的答案,为了更好的格式化。谢谢你迄今为止的帮助!帮助我理解了一点。所以我想我也开始在这里追上一点,编辑我的答案,以便更好地格式化。谢谢你迄今为止的帮助!帮我多了解一点。谢谢!我以前试过几次,但我无法将它输出到我的视图,我是否也必须在TasksController中引用它?或者我应该直接使用当前控制器代码$tasks=tasks::findOrFail($id);返回视图('tasks.show')->withTasks($tasks);谢谢你的帮助,我们在拼写上有一个错误,这就是为什么它不能工作的原因。谢谢!我试了一下