第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 belonsToMany 關(guān)系上使用 withPivot 時限制檢索的列

在 belonsToMany 關(guān)系上使用 withPivot 時限制檢索的列

PHP
米脂 2023-04-28 17:24:01
我有一個名為 Shifts 的模型,它與 shift_employee 表具有 belongsToMany 關(guān)系,該表充當(dāng)數(shù)據(jù)透視表來記錄員工的輪班申請。我還有一個范圍,以便我可以返回帶有移位對象的應(yīng)用程序。這是我的 Shift 模型的一部分:class Shift extends Model{    //    use SoftDeletes;    use \App\Http\Traits\UsesUuid;    protected $guarded = [];    public function applications()    {        return $this->belongsToMany(Employee::class, 'shift_employee')->as('application')->withTimestamps()->withPivot('shortlisted');    }...    public function scopeWithApplications($query)    {        $query->with('applications');    }...}我的 shift_employee 數(shù)據(jù)透視表非常簡單,結(jié)構(gòu)如下所示。我有一個額外的字段來確定應(yīng)用程序是否已入圍:        Schema::create('shift_employee', function (Blueprint $table) {        $table->primary(['employee_id', 'shift_id']);        $table->uuid('employee_id');        $table->uuid('shift_id');        $table->boolean('shortlisted')->default(false);        $table->timestamps();        $table->foreign('employee_id')            ->references('id')            ->on('employees');        $table->foreign('shift_id')            ->references('id')            ->on('shifts')            ->onDelete('cascade');        });下面是我用于檢索班次信息的 API show 函數(shù):public function show($id){    $shift = Shift::where('id', $id)        ->with...()        ->withApplications()        ->with...()        ->first();    return response([        'shift' => $shift,    ]);}這是我得到的回應(yīng):"shift": {    "id": "2b91f55b-c0ff-4bdb-abc4-02604ba6a161",    "some_field": "some_value",    ...    "applications": [        {            some_field: "some_value",            ...            application: {                shift_id: "2b91f55b-c0ff-4bdb-abc4-02604ba6a161",                employee_id: "some_uuid",                created_at: ...,                updated_at: ...,                shortlisted: 0            }        },        {        ...        }    ]...}我想要做的是用數(shù)據(jù)透視表中的字段“入圍”替換整個“應(yīng)用程序”內(nèi)部對象,這樣它看起來像這樣:我怎樣才能做到這一點(diǎn)?理想情況下,雄辯地調(diào)用 withPivot 之類的東西,但不包括其他字段并且不返回對象。我在文檔中找不到它,但是否存在類似的東西?
查看完整描述

3 回答

?
飲歌長嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個贊

我認(rèn)為最直接的方法是使用數(shù)據(jù)透視模型基于數(shù)據(jù)透視表建立獨(dú)立關(guān)系:


class ShiftEmployee extends Pivot

{

    protected $table='shift_employee';

現(xiàn)在是 Shift 模型中的新關(guān)系:


class Shift extends Model

{

    public function shortlistedApplications()

    {

        return $this->hasMany(ShiftEmployee::class,'shift_id');

    }

 public function scopeWithShortlistedApplications($query)

    {

        $query->with('shortlistedApplications:shift_id,shortlisted');

    }

}

現(xiàn)在這個新范圍將帶來你想要的數(shù)據(jù)


查看完整回答
反對 回復(fù) 2023-04-28
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個贊

我認(rèn)為你需要的是只加載shortlisted你的員工應(yīng)用程序的屬性scopeWithApllications:


public function scopeWithApplications($query)

{

    $query->with('applications.application:id,shortlisted');

}

這仍然會返回一個Application實(shí)例作為關(guān)系,但只會加載它的shortlisted屬性。然后,在檢索之后,您可以映射您的集合,以便將應(yīng)用程序的屬性合并到您的員工(如果這真的很重要)。但就數(shù)據(jù)短缺而言,這可以解決問題。


查看完整回答
反對 回復(fù) 2023-04-28
?
呼如林

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個贊

在您的應(yīng)用程序模型中使用 withPivot 方法。像這樣:


public function applications(){

return $this->belongsToMany('App\Application')

? ? ->withPivot('shortlisted')

? ? ->withTimestamps();}

查看完整回答
反對 回復(fù) 2023-04-28
  • 3 回答
  • 0 關(guān)注
  • 186 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號