在现有 table 模式上使用枢轴 table 指定 Eloquent 模型中的关系字段
Specifying Relationship Fields in Eloquent Models using pivot tables on existing table schema
在 Laravel 上阅读 documentation 的枢轴 tables 时,我很难猜测我如何指定适当的字段,而 moving/redesighning php 把我当前项目的代码改成 Laravel.
我遇到的问题是,在我现有的项目中,我有以下 tables:
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
table 我设置了以下模型:
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";
}
所以我想知道如何在 table 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');
}
}
- 然后在关系定义中指定您想要 return 的模型的 return 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
有 as pk oujisama_id
而不是普通的 id
,那么关系定义将是:
return $this->belongsToMany(Oujisama::class,'suki,'id','oujisama_id')->using(Suki::class);
同理,OujiSama
的关系也定义好了
在 Laravel 上阅读 documentation 的枢轴 tables 时,我很难猜测我如何指定适当的字段,而 moving/redesighning php 把我当前项目的代码改成 Laravel.
我遇到的问题是,在我现有的项目中,我有以下 tables:
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
table 我设置了以下模型:
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";
}
所以我想知道如何在 table 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');
}
}
- 然后在关系定义中指定您想要 return 的模型的 return 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
有 as pk oujisama_id
而不是普通的 id
,那么关系定义将是:
return $this->belongsToMany(Oujisama::class,'suki,'id','oujisama_id')->using(Suki::class);
同理,OujiSama
的关系也定义好了