我有3个表:books
,categories
和book_category
。
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;
}
但是在“预览”,“更新”页面中未选中创建时检查的类别。在book_category
表中,所有选中的类别均已保存。我认为问题出在关系上。
我为book_category
表创建了模型。结果,有3种模型:
Book, Category, BookCategory
。如何实现它们之间的关系?
很显然,Book
可以有许多类别,因此在Book
模型中,我写道:
public $hasMany = [
'categories' => 'mark\myplugin\Models\Category'
];
BookCategory
,因为书籍通过book_category
表与类别链接。但是如何与其他模型搭配?
答案 0 :(得分:1)
在多对多关系中,BookCategory被认为是一个弱实体
您无需为此创建模型
尝试一下
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');
}
}
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
答案 1 :(得分:0)
我做错了。这是解决方案。我使用了Builder。
m12=pd.merge(df1, df2, on=['Circle','Division'], how='inner',suffixes=('1',' 2'))
m13=pd.merge(df1, df3, on=['Circle','Division'], how='inner',suffixes=('1',' 3'))
m14=pd.merge(df1, df4, on=['Circle','Division'], how='inner',suffixes=('1',' 4'))
m23=pd.merge(df2, df3, on=['Circle','Division'], how='inner',suffixes=('2',' 3'))
m24=pd.merge(df2, df4, on=['Circle','Division'], how='inner',suffixes=('2',' 4'))
m34=pd.merge(df3, df4, on=['Circle','Division'], how='inner',suffixes=('3',' 4'))
,book_id
,并将两者均设置为主键。在Book模型文件中写入:
public $ belongsToMany = [ '类别'=> ['mark \ myplugin \ Models \ Category','table'=>'mark_myplugin_books_categories'] ];
就是这样!现在,您检查的类别将保存到数据透视表中,并且将在“预览”,“更新”页面中进行检查。