我刚开始为我的学校作业开展一个laravel项目。我刚刚开始了大约一个星期,所以我对laravel的基本知识还不完整。
今天,我在laravel中遇到了模型多对多的问题。我用迁移A和B创建了2个模型。在App \ A.php
中<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class A extends Model
{
//
public function B(){
return $this->belongsToMany('App\B');
}
}
并在App \ B.php中
namespace App;
use Illuminate\Database\Eloquent\Model;
class B extends Model
{
//
public function A(){
return $this->belongsToMany('App\A');
}
}
我认为应该做好这件事。但是当我使用seeder来创建虚拟数据时,我得到的错误是没有创建表A_B。我假设我必须为2个枢轴列创建空表A_B,这很烦人。有没有更好的方法,一种创建多对多关系的正确方法,而无需为他们手动创建数据透视表?
答案 0 :(得分:0)
我不敢。有一些快捷方式,比如它们显示here的方式,但你最终会做一些手动工作来创建表格。无论如何,您最终都会使用迁移,但根据您对数据透视所需的控制量,您可能希望使用模型。使用数据透视表的模型不是强制性的。
https://laravel.com/docs/5.5/migrations#creating-tables
这可能是您的迁移最终会如下所示:
<Switch>
<Route path="/" render={Home} />
<Route path="/topics" render={(props) => <ChildComponent rows={rows} {...props} /> } />
<Route path="/user/:userId" render={(props) => <UserProfile fetchUserData={fetchUserData} {...props} />} />
<Route render={() => <div>Not Found</div>} />
</Switch>
但是如果你真的想要,你也可以使用新模型创建一个自定义表(使用自定义名称,如ABRandomName)。只需在文档中查找定义自定义中间表模型标题:
https://laravel.com/docs/5.5/eloquent-relationships#many-to-many