Laravel HasMany не возвращает никаких результатов - даже не запрашивает? - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в Laravel и последние пару часов я вырывал свои волосы. У меня есть существующий веб-сайт, который я пытаюсь преобразовать в Laravel, первый шаг - создание API для него.

У меня есть модель Campaign, и в каждой кампании есть сообщения. Так что между ними должно быть отношение OneToMany.

Вот мой код:

Кампании. php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Campaigns extends Model
{
    // Define the table name for this model
    protected $table = 'campaign_accounts';
    protected $primaryKey = 'id';

}

CampaignPosts. php

namespace App;

use Illuminate\Database\Eloquent\Model;

class CampaignPosts extends Model
{
    // Define the table name for this model
    protected $table = 'campaign_posts';
    protected $primaryKey = 'id';

}

CampaignsController. php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use App\CampaignPosts;

DB::enableQueryLog();

class CampaignsController extends Controller
{

    public function index()
    {
        return \App\Campaigns::all();
    }

    public function show($id)
    {
        $campaigns = \App\Campaigns::find($id);
        $campaignposts = $campaigns->campaignPosts;
        dd(
            $campaignposts
        );

        return array(
            'status' => 'OK',
            'data' => array(
                'campaign' =>$campaigns,
                'posts' => $campaignposts
            )
        );
    }

    // Define relationship to CampaignPost
    public function campaignPosts()
    {
        // First key is foreign key, second key is local key
        return $this->hasMany('App\CampaignPosts', 'accountid', 'accountid');
    }
}

CampaignPostsController. php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Campaigns;

class CampaignPostsController extends Controller
{
    // Define relationship to CampaignPost
    public function campaigns()
    {
        // First key is foreign key, second key is local key
        return $this->belongsTo('App\Campaigns', 'accountid', 'accountid');
    }
}

Когда я перехожу к / кампаниям / все кампании отображаются нормально, однако когда я перехожу к кампаниям / {id}, я получаю результат только для самой кампании, я ничего не могу получить от лежащие в основе сообщений Campaign.

Я пытался использовать регистратор запросов к базе данных, и похоже, что даже не выполняется запрос к таблице campaign_posts, ничего не происходит ...

Any мысли? Это сводит меня с ума.

Спасибо!

1 Ответ

2 голосов
/ 23 апреля 2020

методы отношений должны перейти к собственным моделям.

namespace App;

use Illuminate\Database\Eloquent\Model;

class Campaigns extends Model
{
    // Define the table name for this model
    protected $table = 'campaign_accounts';
    protected $primaryKey = 'id';

    // Define relationship to CampaignPost
    public function campaignPosts()
    {
        // First key is foreign key, second key is local key
        return $this->hasMany('App\CampaignPosts', 'accountid', 'accountid');
    }

}

и

namespace App;

use Illuminate\Database\Eloquent\Model;

class CampaignPosts extends Model
{
    // Define the table name for this model
    protected $table = 'campaign_posts';
    protected $primaryKey = 'id';

    // Define relationship to CampaignPost
    public function campaigns()
    {
        // First key is foreign key, second key is local key
        return $this->belongsTo('App\Campaigns', 'accountid', 'accountid');
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...