Октябрь CMS отношение к себе - PullRequest
0 голосов
/ 24 октября 2018

У меня есть модель событий, и я хочу иметь возможность выбирать другие события в ней для отображения на веб-интерфейсе.

Первое, что я попробовал, это отношения, но проблема в том, что я не знаю, как использовать сводную таблицу, потому что на самом деле она должна содержать два поля, и оба должны называться 'event_id', которыйочевидно невозможно.Может быть, кто-то может предложить любой способ избежать этого или лучший способ решить мою проблему с полем выбора событий в модели событий?

Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

да same name for relation_id может быть невозможно, НО у нас есть опция :)

вы можете создать промежуточную таблицу, подобную этой

<?php namespace HardikSatasiya\SoTest\Updates;

use Schema;
use October\Rain\Database\Updates\Migration;

class BuilderTableCreateHardiksatasiyaSotestEventsEvents extends Migration
{
    public function up()
    {
        Schema::create('hardiksatasiya_sotest_events_events', function($table)
        {
            $table->engine = 'InnoDB';
            $table->increments('id')->unsigned();
            $table->integer('events_id')->unsigned();
            $table->integer('related_events_id')->unsigned();
        });
    }

    public function down()
    {
        Schema::dropIfExists('hardiksatasiya_sotest_events_events');
    }
}

enter image description here

Тогда, просто нам нужно добавить отношение с соответствующими параметрами

public $belongsToMany =[
    'skills' => [
        'HardikSatasiya\SoTest\Models\Skills',
        'table' => 'hardiksatasiya_sotest_events_skills',
        'order' => 'title'
    ],
    'related_events' => [
        'HardikSatasiya\SoTest\Models\Events',
        'table' => 'hardiksatasiya_sotest_events_events',
        'order' => 'title',
        'key' => 'events_id',
        'otherKey' => 'related_events_id'
    ]
];

мы указываем, что для этого отношения event_id предназначено для основного события, а related_events_id для другого события, которое мы добавляем как связанное событие.config_relation.yaml <- который будет находиться в папке просмотра контроллера событий. </p>

# ===================================
#  Relation Behavior Config
# ===================================

skills:
    label: Skill
    view:
        list: $/hardiksatasiya/sotest/models/skills/columns.yaml
        toolbarButtons: add|remove
    manage:
        list: $/hardiksatasiya/sotest/models/skills/columns.yaml
        form: $/hardiksatasiya/sotest/models/skills/fields.yaml

related_events:
    label: Events
    view:
        list: $/hardiksatasiya/sotest/models/events/columns.yaml
        toolbarButtons: add|remove
    manage:
        list: $/hardiksatasiya/sotest/models/events/columns.yaml
        form: $/hardiksatasiya/sotest/models/events/fields.yaml

модальные поля события $/hardiksatasiya/sotest/models/events/fields.yaml

fields:
    title:
        label: Title
        span: auto
        type: text
    description:
        label: Description
        size: ''
        span: auto
        type: textarea
    skills:
        label: Skills
        type: partial
        path: $/hardiksatasiya/sotest/controllers/events/_relation_skills.htm
    related_events:
        label: Events
        type: partial
        path: $/hardiksatasiya/sotest/controllers/events/_related_events.htm

теперь для частичного _related_events.htm

<?= $this->relationRender('related_events') ?>

результата

enter image description here

доступав коде

use HardikSatasiya\SoTest\Models\Events as EventsModel;

function onStart() {
    $this['event'] = $event = EventsModel::first();
    dd($event->related_events);
}

если есть сомнения, прокомментируйте.

...