我有两个模型,它们之间定义了多对多关系:User
和Post
。我需要访问所有用户的帖子'数据透视表记录。我怎样才能做到这一点?例如:
$user->posts()->pivot()->get(); // I need to do something like this
我需要这个的原因是在这些支点上的一个查询中执行批量更新。插图示例:
// set 'times_seen' to 100 for all of the pivot records
$user->posts()->pivot()->update(['times_seen' => 100]);
答案 0 :(得分:1)
你的问题不是很清楚,我不确定你真正需要什么,所以请提供更多细节。
pivot 表中的数据在相关型号的 $ pivot 属性中可用,因此您可以使用以下内容访问它:
<select id="number" name="number_towers">
<option hidden value=""></option>
<option value="1">1 tower</option>
<option value="2">2 towers</option>
<option value="3">3 towers</option>
</select>
<div id="1tower" style="display: none;">
A Tower Value 1: <input type ="text" name = "curent_nominal_sec1"/><br>
B Tower Value 1: <input type ="text" name = "putere_sec1"/><br>
C Tower Value 1: <input type ="text" name = "clasa_precizie_sec1"/></div>
<div id="2tower" style="display: none;">
A Tower Value 2: <input type ="text" name = "curent_nominal_sec2"/><br>
B Tower Value 2: <input type ="text" name = "putere_sec2"/><br>
C Tower Value 2: <input type ="text" name = "clasa_precizie_sec2"/></div>
<div id="3tower" style="display: none;">
A Tower Value 3: <input type ="text" name = "curent_nominal_sec3"/><br>
B Tower Value 3: <input type ="text" name = "putere_sec3"/><br>
C Tower Value 3: <input type ="text" name = "clasa_precizie_sec3"/></div>
您可以在文档中找到有关如何使用数据透视表的更多信息:https://laravel.com/docs/5.1/eloquent-relationships#many-to-many
更新所有相关枢轴行的最有效方法是直接对该表进行操作:
foreach ($user->posts as $post) {
echo $post->pivot->someFieldFromPivotData;
}
答案 1 :(得分:1)
数据透视表通常只有两个用于连接两个模型的外键。如果您需要获取指定用户的所有帖子,可以使用$user->posts()
。
我想在一个sql查询中批量更新数据透视记录。迭代它们中的每一个都是低效的
如果您理解正确,则希望将attach()
,detach()
和sync()
与数组一起使用:
$user->roles()->detach([1, 2, 3]);
$user->roles()->attach([1, 2, 3]);
$user->roles()->sync([1, 2, 3]);
https://laravel.com/docs/5.1/eloquent-relationships#inserting-many-to-many-relationships