【问题标题】:laravel belongstomany with pivot table doesn't get datalaravel 属于带有数据透视表的用户没有获取数据
【发布时间】:2021-03-29 07:36:09
【问题描述】:

我有 3 张桌子:legalpursuit,担保人,guarantors_legalpursuit。我的项目中有多对多关系。 我将 legalpursuit_id 保存在 legalpursuit / guarantors_id 保存在 guarantors / 中,它们都保存在 guarantors_legalpursuit 中。

我正在使用 laravel 8。 如何显示每个帖子的标签?如何从 tag_post 表中选择数据? 我使用它如下。但它没有得到数据。

这是我的 Legalpursuit 模型:

public function guarantorses()
{
    //return $this->belongsToMany(RelatedModel, pivot_table_name, foreign_key_of_current_model_in_pivot_table, foreign_key_of_other_model_in_pivot_table);
    return $this->belongsToMany(Guarantors::class, 'guarantors_legalpursuit', 'legalpursuit_id', 'guarantors_id');
}

这是我的担保人模型:

    public function legalpursuits()
{
    //return $this->belongsToMany(RelatedModel, pivot_table_name, foreign_key_of_current_model_in_pivot_table, foreign_key_of_other_model_in_pivot_table);
    return $this->belongsToMany(LegalPursuit::class,'guarantors_legalpursuit','guarantors_id', 'legalpursuit_id');
}

这是我的控制器:

    public function edit(LegalPursuit $legalPursuit, $id)
{
    $user           = Auth::user();
    $data           = LegalPursuit::find($id);

    $guarantors     = $data->guarantorses()->orderBy('name')->get();
    $lawyers        = $data->lawyers()->orderBy('name')->get();

    dd($guarantors);

    $filesPursuit   = LegalPursuit::find($id)->files;
    $getLawyersLeft = DB::table('users')->where('user_type', '2')
                                        ->where('active', '1')
                                        ->where('deleted', '0')
                                        ->take('5')
                                        ->get();

    return view('pages.legalpursuit.edit', compact('data', 'getLawyersLeft', 'filesPursuit', 'user'));
}

【问题讨论】:

  • 您为某些表格使用了西班牙语复数名称。没有什么不妥。但是你必须告诉你的模型它是什么表:protected $table = 'guarantorses';。你可能已经这样做了。如果没有,Laravel 将遵循它自己的协议,因此 'guarantors_id' 不会转换为表名 'guarantorses'。乍一看,您的模型和关系没有任何问题。
  • 受保护的 $table = '担保人';

标签: php laravel laravel-8 has-and-belongs-to-many


【解决方案1】:

没有表名不同,实际上完全符合;

protected $table    = 'guarantors';

表格的字段如下;

table name; guarantors
field: ID
field: name

数据透视表名称和详细信息;

 table name; guarantors_legalpursuit
id;
guarantors_id
legalpursuit_id



I can also do the adding process successfully as follows.

        $guarantorArray = $request->input('GUARANTORS');
        //$GuarantorsID = Guarantors::find($guarantorArray);
        $data->guarantorses()->attach($guarantorArray);

但我无法提取关系数据。它没有给出错误。但是虽然表中有数据,但是数组感觉是空的。

【讨论】:

  • 谢谢。在这种情况下,数据透视表名称应为 guarantor_legalpursuit,均为单数形式。
  • II完全按照你说的改了表名,但是问题没有解决。
  • 兄弟,你的问题是个谜。尽你所能尝试dd() 并找出发生了什么。您的代码中没有任何问题。但不知何故,它不起作用。如果您找到原因,请告诉我们。
猜你喜欢
  • 2021-09-10
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 2018-08-31
  • 2018-04-10
相关资源
最近更新 更多