代码之家  ›  专栏  ›  技术社区  ›  Jaaayz

laravel5.5更新多对多关系模型的复选框

  •  3
  • Jaaayz  · 技术社区  · 6 年前

    我有一个 多对多

    所以我想更新pivot表,但首先我想知道这两个模型是否已经存在于这个pivot表中。

    下面是我在两个模型中对关系的定义:

    分析请求模型

    public function request_methods()
            {
                return $this->belongsToMany('App\Models\Methodologies')->withTimestamps();;
            }
    

    在我的另一个模型中:

    public function methods_requested()
        {
            return $this->belongsToMany('App\Models\AnalysisRequest')->withTimestamps();;
        }
    

    所以这两个模型都有自己的数据透视表和 身份证件 附属的。现在我想做的是,当两个模型已经存在相互连接的模型时,我想在视图上选中复选框,但我无法实现。

    <?php
    
    namespace App\Models;
    
    use Eloquent as Model;
    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class AnalysisRequestMethodologies extends Model
    {
    
            public $table = 'analysis_request_methodologies';
    
            public $fillable = [
                'analysis_request_id',
                'methodologies_id',
            ];
    
            /**
             * The attributes that should be casted to native types.
             *
             * @var array
             */
            protected $casts = [
                'analysis_request_id' => 'integer',
                'methodologies_id' => 'integer',
            ];
    
            /**
             * Validation rules
             *
             * @var array
             */
            public static $rules = [
                'analysis_request_id' => 'required|unique_with:analysis_request_methodologies,methodologies_id',
                'methodologies_id' => 'required',
            ];
    }
    

    这是我的密码 控制器 下图:

     public function edit($id)
    {
        $analysis_request = $this->analysisrequestRepository->findWithoutFail($id);
    
        $checkeds = AnalysisRequest::find($id)->request_methods()->pluck('id');
    
        return view('encoder-dashboard.analysis-request-methods.create', compact('analysis_request', 'checkeds'));
    }
    

    在我的心里 看法

    <div class="form-group col-sm-12">
        @forelse($analysis_request->category->methodology as $method)
        <label>
            <?php $checked = in_array($method->id, $checkeds) ? true : false; ?>
            {{ Form::checkbox('methodologies_id[]', $method->id) }}
            {{ $method->name }} with the lead time of {{ $method->lead_time }} and the DOH standard of {{ $method->doh_standard }}
        </label>
        @empty
            <h3>The category you selected has no method yet</h3>
        @endforelse
    </div>
    

    question 这可能和我的问题有关。

    他说:

    完整性约束冲突:字段列表中的1052列“id”为 不明确(SQL:选择 id methodologies 内部连接 analysis_request_methodologies 方法论 身份证件 = 分析\u请求\u方法 . methodologies_id 哪里 分析\u请求\u方法 . analysis_request_id = 10)

    referenced question lists 但它在年被贬值了 拉威尔5 我需要使用 pluck 相反。但还是无法解开谜团。

    如果有人能帮忙,我将不胜感激。 提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Teoman Tıngır    6 年前

    我假设您的相关表名是 methodologies ,所以您的查询应该如下所示

    $checkeds = AnalysisRequest::find($id)->request_methods()->pluck('methodologies.id');
    

    您必须指定表名,因为在您这样说时,创建查询和联接表是很有说服力的 request_methods() mysql应该知道id属于哪个表