【问题标题】:Laravel: How to use scope with mass assignmentLaravel:如何将范围与质量分配一起使用
【发布时间】:2018-03-21 13:48:54
【问题描述】:

我有两个具有多对多关系的实体:FormSection。一个有效的部分必须是“活动的”然后我有一个范围:

/**
 * 
 * @param Builder $query
 * @return Builder
 */
public function scopeActive($query) 
{
    return $query->where('is_active', true);
}

并且在渲染表单时,只需将活动部分传递给视图:

$sections = Section::active()->get();

问题是,当发送 POST 请求时,我必须执行与 sync 相关的批量分配,并且无法控制 id 的传递(活动和非活动):

$form->sections()->sync($sectionsId);

有没有一种方法可以只附加活动部分而无需手动检查每个部分?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您必须先获取 $sectionIds 中的部分,然后您必须使用 sync() 方法。 试试这段代码,

    $sectionIds = Section::active()->whereIn('id', [1, 2, 3])->pluck('id');
    $form->sections()->sync($sectionIds);
    

    我相信这会奏效。

    【讨论】:

    • 您想显示您的 $sectionsId 转储吗?
    • 它是一个整数数组,如[0 => 1, 1 => 2, 2 => 3, 3 => 4]
    • 还有一点是sync不是你在第二个sn-p中假设的收集方法
    • 同步 $sectionsId 数组中与活动部分匹配的所有部分。假设如果在[1, 2, 3] 中,id 3 未激活,则该方法应仅将中间表同步到[1, 2] 并忽略不活动的
    • 你有剖面模型吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多