簡體   English   中英

Corcel:如何在Laravel中的WordPress表之間形成多對多關系?

[英]Corcel : How to form a many-to-many relationship between WordPress tables in Laravel?

我使用Laravel 7Corcel連接到WordPress安裝的數據庫。

連接工作正常,到目前為止從 WordPress 獲取數據沒有問題:
App\Project::where('id',3)->get(); ✔️
App\Tester::where('id',4)->get(); ✔️

在我的 WordPress 安裝中,有一個名為WP Project Manager的項目管理插件使用了額外的表。 我想通過 pivot 表(WP-Plugin: pm_role_user )在 wordpress 表(WP: users )和插件表(WP-Plugin: pm_projects )之間形成多對多關系。

該插件的 pivot 表有四個字段: project_idrole_idassigned_byuser_id 它將用戶與項目聯系起來。

所以我創建了模型項目測試器(在我的上下文中,用戶被認為是測試器),如下所示:

項目.php

<?php

namespace App;

use Corcel\Model as Model;

class Project extends Model
{

    protected $table = 'pm_projects';

    protected $fillable = [
        'title',
        'description',
        'status',
        'budget',
        'pay_rate',
        'est_completion_date',
        'color_code',
        'order',
        'projectable_type',
        'completed_at',
        'created_by',
        'updated_by',
    ];

    protected $dates = [
        'est_completion_date'
    ];

    public function testers()
    {
        return $this->belongsToMany(Tester::class, 'pm_role_project_users', 'role_project_id', 'user_id');
    }

}

測試儀.php

<?php

namespace App;

use Corcel\Model\User as User;

class Tester extends User
{

    public function projects()
    {
        return $this->belongsToMany(Project::class, 'pm_role_project_users', 'user_id', 'role_project_id');
    }

}

當我嘗試使用App\Project::where('id',3)->testers()->get();獲取用戶項目時 ,我收到以下錯誤消息:

帶有消息“調用未定義的方法 Illuminate/Database/Eloquent/Builder::testers()”的 BadMethodCallException

我的問題:
如何使用 Corcel 在 Laravel 中的 WordPress 表之間建立多對多連接?

App\Project::where('id',3) 是 eloquent 查詢構建器實例,而不是 eloquent 元素。 您應該先使用first()方法,然后再使用 model 方法/關系。 所以代碼應該是這樣的:

App\Project::where('id',3)->first()->testers()->get();

但它可以很簡單(你應該使用它):

App\Project::where('id',3)->first()->testers;

它將從項目 3 返回測試人員集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM