十月 CMS 与自我的关系
October CMS relation to self
我有事件模型,希望能够 select 其中的其他事件显示在前端。
我首先尝试的是关系,但问题是我不知道如何使用枢轴 table 因为实际上,它应该包含两个字段并且都应该命名为 'event_id' 这显然是不可能的。
也许有人可以建议任何避免这种情况的方法或更好的方法来解决我在事件模型中使用事件选择字段的问题?
提前致谢。
是的 same name for relation_id
可能是不可能的,但我们有选择:)
你可以像这样创建中间 table
<?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');
}
}
Then, just we need to add relation with proper options
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'
]
];
we are specifying that for this relation event_id
is for main event and related_events_id
is for other event which we add as related event.
config_relation.yaml
<- which will be inside event controller view folder.
# ===================================
# 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
event modal fields $/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
now for partial _related_events.htm
<?= $this->relationRender('related_events') ?>
result
accessing in code
use HardikSatasiya\SoTest\Models\Events as EventsModel;
function onStart() {
$this['event'] = $event = EventsModel::first();
dd($event->related_events);
}
如有疑问请评论。
我有事件模型,希望能够 select 其中的其他事件显示在前端。
我首先尝试的是关系,但问题是我不知道如何使用枢轴 table 因为实际上,它应该包含两个字段并且都应该命名为 'event_id' 这显然是不可能的。 也许有人可以建议任何避免这种情况的方法或更好的方法来解决我在事件模型中使用事件选择字段的问题?
提前致谢。
是的 same name for relation_id
可能是不可能的,但我们有选择:)
你可以像这样创建中间 table
<?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');
}
}
Then, just we need to add relation with proper options
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'
]
];
we are specifying that for this relation
event_id
is for main event andrelated_events_id
is for other event which we add as related event.config_relation.yaml
<- which will be inside event controller view folder.
# ===================================
# 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
event modal fields
$/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
now for partial
_related_events.htm
<?= $this->relationRender('related_events') ?>
result
accessing in code
use HardikSatasiya\SoTest\Models\Events as EventsModel;
function onStart() {
$this['event'] = $event = EventsModel::first();
dd($event->related_events);
}
如有疑问请评论。