在现有 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 上指定表示外键的适当关系字段?在文档中,我很难弄清楚这些字段是如何指定的。

为了解决问题,您需要执行以下两个主要步骤:

  1. 通过关系指定数据透视模型中的外键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');
   }
}

  1. 然后在关系定义中指定您想要 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的关系也定义好了