0
votes

I use locations using nested tree and use a "parent" field to select parent location (that i created using reorder records). But i need "parent" field to show me only parents, only locations with parent_id equals to NULL.

On location model fields.yaml i have:

 fields:
    name:
        label: Name
        oc.commentPosition: ''
        span: left
        required: 1
        type: text
    slug:
        label: Slug
        oc.commentPosition: ''
        span: right
        required: 1
        preset:
            field: name
            type: slug
        type: text
    parent:
        label: Parent Location
        oc.commentPosition: ''
        nameFrom: name
        descriptionFrom: description
        span: left
        type: relation
        placeholder: 'select parent location'
    description:
        label: Description
        size: large
        oc.commentPosition: ''
        span: right
        type: textarea

But now i get all locations on backend field "parent". Is there a way to get only parent locations?

Table schema:

Entries:

            $table->engine = 'InnoDB';
            $table->increments('id')->unsigned();
            $table->integer('user_id')->nullable()->unsigned();
            $table->string('name')->nullable();
            $table->string('slug');
            $table->text('content')->nullable();
            $table->integer('location_id')->nullable();
            $table->timestamp('published_at')->nullable();
            $table->boolean('published')->default(0);
            $table->timestamp('created_at')->nullable();
            $table->timestamp('updated_at')->nullable();

Locations:

        $table->engine = 'InnoDB';
        $table->increments('id')->unsigned();
        $table->string('name')->nullable();
        $table->string('slug')->nullable();
        $table->text('description')->nullable();
        $table->integer('parent_id')->nullable()->unsigned();
        $table->integer('nest_left')->nullable();
        $table->integer('nest_right')->nullable();
        $table->integer('nest_depth')->nullable();
        $table->timestamp('created_at')->nullable();
        $table->timestamp('updated_at')->nullable();
1
means you want to show drop-down with records whose parent_id IS NULL and don't care about relational data means it's one to one relation right ? - Hardik Satasiya
On Entry model i use belongsTo, and on Location model i use hasMany - George

1 Answers

0
votes

Hmm, I am not sure we can pass condition with relation widget and make filtered list from database, instead I suggest to use manually drop-down way to have more control.

To do that , change your relational field parent in configuration to parent_id (as this will be your db field)

New config will look like this

parent_id:
    label: Parent Location
    oc.commentPosition: ''
    span: left
    type: dropdown
    placeholder: 'select parent location'

Now inside your location model you need to provide source

public function getParentIdOptions(){
    return \Locations::->whereNull('parent_id')->lists('name', 'id');
}

this will return array of location (id, name key => value pair) where parent_id IS NULL or your based on your custom condition.

please try this if you face any issue please comment.