LaravelRUS / SleepingOwlAdmin

🦉 Administrative interface builder for Laravel (Laravel admin)
http://sleepingowladmin.ru/
MIT License
805 stars 217 forks source link

Не работают связи в datatablesAsync #993

Closed yurkoi83 closed 4 years ago

yurkoi83 commented 5 years ago

ru

Версия в композере

    "laravel/framework": "5.8.*",
    "laravelrus/sleepingowl": "dev-development",

Что надо сделать что бы увидеть ошибку?

1. class Order extends Model .... $this->belongsTo(User::class);

2. Добавляем секцию public function onDisplay(Request $request) { $display = AdminDisplay::datatablesAsync(); $display->with('user'); $display = $display ->setApply(function ($query) { $query->whereStatus(Order::STATUS_DONE); })->setColumns([ AdminColumn::text('user.name', 'Пользователь'), AdminColumn::datetime('updated_at')->setLabel('Дата добавления')->setFormat('d.m.Y H:i:s'), ]);

3.

Что должно сработать?

  1. Должен сработать relation Кстати, если сделать так: $display = AdminDisplay::table(); Все работает.

    Что сработало?

  2. Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsTo::getOwnerKey()

daaner commented 4 years ago

А связь магией сделана? укажи четко форейн кей. Связи работают хорошо Дай полную секцию. убери для теста скоуп (или что там у тебя)

->setApply(function ($query) {
$query->whereStatus(Order::STATUS_DONE);
})
daaner commented 4 years ago

скрин со связью: image даже и предыдущее поле связь

Модель:

public function users() {
      return $this->belongsTo(User::class,'created_by','id');
    }

секция:

AdminColumn::text('users.name', 'Создано')
            ->setSearchCallback(function ($column, $query, $search){
              return $query->orWhereHas('users', function ($q) use ($search) {
                $q->where('name', 'like', '%'.$search.'%');
              });
            })
            ->append(AdminColumn::filter('created_by'))
            ->setSmall('updated_at', false)
            ->setWidth('150px'),
          AdminColumn::datetime('date_at', 'Дата')
            ->setSmall('users.name', false)
            ->setWidth('150px'),