使用现有表模式上的数据透视表在雄辩模型中指定关系字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用现有表模式上的数据透视表在雄辩模型中指定关系字段相关的知识,希望对你有一定的参考价值。
虽然在Laravel上为枢轴表阅读documentation,但我很难猜测如何在将当前项目的php代码移入/重新设计Laravel时指定适当的字段。
我遇到的问题是,在我现有的项目中,我有下表:
ohimeSama:
id: Primary Key
namae: String
oujiSama
id: Primary Key
namae: String
suki:
id: pk
princess_id: Foreighn Key Ohimesama
prince_id: Foreighn Key Oujisama
对于Ohimesama
表,我设置以下模型:
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use App\Model\Suki;
use App\Model\Oujisama;
class Ohimesama extends Model
public $timestamps = false;
protected $table = "ohimesama";
public function princesThatShesInLove()
return $this->belongsToMany(Oujisama::class)->using(Suki::class);
与Oujisama
相同:
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use App\Model\Ohimesama
use App\Model\Suki;
class Oujisama extends Model
public $timestamps = false;
protected $table = "ohimesama";
public function lovedByPrincess()
return $this->belongsToMany(Ohimesama::class)->using(Suki::class);
此外,Suki
的枢轴模型为:
namespace App\Model;
use Illuminate\Database\Eloquent\Relations\Pivot;
class Suki extends Pivot
public $timestamps = false;
protected $table = "suki";
所以我想知道如何指定代表表suki
上的外键的适当关系字段?在文档中,我很难找出如何指定这些字段。
答案
为了解决问题,您需要遵循以下两个主要步骤:
- 通过关系指定枢纽模型
Suki
中的外键:
namespace App\Model;
use Illuminate\Database\Eloquent\Relations\Pivot;
use App\Model\Oujisama;
use App\Model\Ohimesama;
class Suki extends Pivot
public $timestamps = false;
protected $table = "suki";
public function ohimesama()
return $this->belongsTo(Ohimesama::class, 'princess_id');
public function ohimesama()
return $this->belongsTo(Oujisama::class, 'prince_id');
- 然后在关系定义中,指定要返回的模型的返回pk。使用Pivot作为fk解析器,万一我们将定义我们的
Ohimesama
模型:
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use App\Model\Suki;
use App\Model\Oujisama;
class Ohimesama extends Model
public $timestamps = false;
protected $table = "ohimesama";
public function princesThatShesInLove()
return $this->belongsToMany(Oujisama::class,'suki','id','id')->using(Suki::class);
如果Oujisama
具有pk oujisama_id
而不是普通id
,则关系定义为:
return $this->belongsToMany(Oujisama::class,'suki,'id','oujisama_id')->using(Suki::class);
类似,也定义了OujiSama
的关系。
以上是关于使用现有表模式上的数据透视表在雄辩模型中指定关系字段的主要内容,如果未能解决你的问题,请参考以下文章
我的 Octobercms 数据透视表获取模型表在我尝试添加时应获取的数据
数据模型表在数据透视表字段列表中可见,但在数据模型本身中不可见 - Excel 2016