与交叉引用表的关系

问题描述 投票:0回答:2

我有3张桌子:bookscategoriesbook_category

qazxsw poi是交叉参考表。它有这样的结构:qazxsw poi

我需要在书籍模型的“创建”页面上输出类别(作为复选框)。如果我这样做,它的工作原理是:

book_category

但是,在预览,更新页面中不会检查创建时检查的类别。在book_id, category_id表中,所有已检查的类别都在保存。我认为问题在于人际关系。

我为// Book Model public function getCategoriesOptions($value, $formData) { $categories = Category::all(); $list = array(); foreach ($categories as $category) { $list[$category->id] = $category->name; } return $list; } 表创建了模型。因此,有3个型号:book_category。如何实现它们之间的关系?

显然,book_category可以有很多类别,因此在Book, Category, BookCategory模型中我写道:

Book

Book因为书通过public $hasMany = [ 'categories' => 'mark\myplugin\Models\Category' ]; 表与类别相关联。但是如何与其他模特一起?

laravel octobercms
2个回答
1
投票

在多对多关系中,BookCategory被视为弱实体

您不需要为它创建模型

试试这个

BookCategory
book_category

更多细节见:namespace App; use Illuminate\Database\Eloquent\Model; class Book extends Model { public function categories() { return $this->belongsToMany('App\Category', 'book_category', 'book_id', 'category_id'); } }


0
投票

我做错了。这是解决方案。我用过Builder。

  1. 使用2个字段创建数据透视表(或交叉引用表):namespace App; use Illuminate\Database\Eloquent\Model; class Category extends Model { public function books() { return $this->belongsToMany('App\Book', 'book_category', 'category_id', 'book_id'); } } Many To Many Relationships并将两者都设置为主键。
  2. 在Book model中创建关系字段。不需要为名称写下划线。在关系属性集名称列中。
  3. 在Book模型文件中写: public $ belongsToMany = ['categories'=> ['mark \ myplugin \ Models \ Category','table'=>'mark_myplugin_books_categories']];

而已!现在,您选中的类别将保存到数据透视表中,并将在“预览”,“更新”页面中进行检查。

© www.soinside.com 2019 - 2024. All rights reserved.