从belongsTo()Laravel 5获取值

从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

我对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->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);谢谢你的帮助,我们在拼写上有一个错误,这就是为什么它不能工作的原因。谢谢!我试了一下