自从过去两周开始使用laravel 5.2后,我发现了一种在DB中存储记录的新方法。
For Instance
User table
id name
1 Test 1
2 Test 2
Project Table
id user_id name
1 1 Project 1
2 2 Project 2
用户和项目表在外键约束中链接。
要存储在 Project 表中,我使用了以下代码行。
Auth::user()->projects()->save($project);
如果我想在任务表中存储记录,我可以使用类似的解决方案吗? 其中project_id和user_id分别是项目和用户表的外键约束。
Task Table
id project_id user_id name
1 1 1 test task
答案 0 :(得分:1)
如果您已经转动,那么您可以通过以下方式实现:
附加Auth::user()->projects()->attach([1 => ['name' => $name], 2, 3]);
同步时Auth::user()->projects()->sync([1 => ['name' => $name], 2, 3]);
更新数据透视 Auth::user()->projects()->updateExistingPivot($projectId, ['name' => $name]);
您可以通过一系列相关模型访问的数据透视数据 - 然后找到您感兴趣的模型并获得pivot
特殊字段:
$project = Auth::user()->projects->find($projectId);
return $project->pivot->name;
你可以到达那里,但只能按照我上面给你的方式。
答案 1 :(得分:1)
是的,你可以这样做。您所要做的就是在Tasks模型中创建两个函数,每个函数对应一个关系:
class Task extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
public function project()
{
return $this->belongsTo('App\Project');
}
}
当您保存任务时,您只需使用附加它们,就像使用它一样。
$user = User::find(1);
$project = Project::find(1);
$task = Task::create();
$task->user()->attach($user);
$task->project()->attach($project);
$task->save();