我有3张桌子:books
,categories
和book_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'
];
表与类别相关联。但是如何与其他模特一起?
在多对多关系中,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');
}
}
我做错了。这是解决方案。我用过Builder。
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并将两者都设置为主键。而已!现在,您选中的类别将保存到数据透视表中,并将在“预览”,“更新”页面中进行检查。