namespace App\Traits;
trait AppTraits
{
/**
* Create pivot array from given values
*
* @param array $entities
* @param array $pivots
* @return array combined $pivots
*/
public function combinePivot($entities, $pivots = [])
{
// Set array
$pivotArray = [];
// Loop through all pivot attributes
foreach ($pivots as $pivot => $value) {
// Combine them to pivot array
$pivotArray += [$pivot => $value];
}
// Get the total of arrays we need to fill
$total = count($entities);
// Make filler array
$filler = array_fill(0, $total, $pivotArray);
// Combine and return filler pivot array with data
return array_combine($entities, $filler);
}
}
型号:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Example extends Model
{
use Traits\AppTraits;
// ...
}
用法:
// Get id's
$entities = [1, 2, 3];
// Create pivots
$pivots = [
'price' => 634,
'name' => 'Example name',
];
// Combine the ids and pivots
$combination = $model->combinePivot($entities, $pivots);
// Sync the combination with the related model / pivot
$model->relation()->sync($combination);
9条答案
按热度按时间63lcw9qa1#
为了
sync
多个模型以及自定义透视数据,您需要:即。
编辑
回复评论:
rkue9o1l2#
这对我有用
jchrr9hc3#
如果要为所有同步项目设置相同的透视值,现在可以使用
->syncWithPivotValues($ids, $pivotValues)
方法。文档中的示例:
vptzau2j4#
连接/分离
Eloquent还提供了一些额外的帮助器方法,使处理相关模型更加方便。例如,假设一个用户可以有多个角色,而一个角色可以有多个用户。要通过在连接模型的中间表中插入记录来将角色附加到用户,请使用attach方法:
将关系附加到模型时,还可以传递要插入到中间表中的附加数据数组:
如果要移除旧角色而仅保留现在附加的新角色,也可以使用同步
默认行为可以通过传递“false”作为第二个参数来更改。这将附加ID为1、2、3的角色,而不会影响现有角色。
在此模式下,同步的行为类似于附加方法。
参考:https://laravel.com/docs/5.4/eloquent-relationships
fv2wmkja5#
将以下trait添加到您的项目并将其作为trait附加到您的模型类。这很有帮助,因为这添加了使用多个透视表的功能。也许有人可以稍微清理一下并改进它;)
型号:
用法:
ztyzrc3y6#
只需将您的字段及其值添加到元素中:
b1zrtrql7#
w51jfk4q8#
把这个放在这里,以防我以后忘记了,再谷歌一次。
在我的例子中,我希望额外列的每一行都有相同的数据
其中,$syncData是ID数组:
或者没有箭头
(array_flip表示我们使用ID作为数组的索引)
1tuwyuhd9#