Сортировать по полям связанной таблицы, используя Eloquent, не присоединяясь - PullRequest
0 голосов
/ 30 октября 2019

Я использовал метод Eloquent для работы с таблицами. Я не использовал запрос и присоединяется. Просто устанавливаю отношения с hasMany и принадлежит To. И я не хочу использовать соединения и запросы. Я должен отсортировать результаты на основе некоторых полей. Сортировка по основным полям таблицы работает без проблем. Но когда я хочу отсортировать по связанным полям таблицы, я получаю сообщение об ошибке.

URL запроса: http://localhost:8000/admin/pagination/fetch_data?page=1&sortby=product.product_title&sorttype=asc

Метод запроса: ПОЛУЧИТЕ Код состояния: 500 Внутренняя ошибка сервера

Это мой код.

Комментарий

class Comment extends Model
{
    public function user()
    {
        return $this-> belongsTo('App\User', "comment_userid");
    }

    public function confirmerUser()
    {
        return $this-> belongsTo('App\User', "comment_confirmeruserid");
    }

    public function product()
    {
        return $this->belongsTo("App\Product", "comment_productid");
    }
}

Продукт

class Product extends Model
{
    public function comments()
    {
        return $this->hasMany('App\Comment', "comment_productid");
    }
}

Пользователь

class User extends Authenticatable
{
    public function comments()
    {
        return $this->hasMany('App\Comment', "comment_userid");
    }

    public function comments_confirmer()
    {
        return $this->hasMany('App\Comment', "comment_confirmeruserid");
    }
}

В контроллере

public function controller_fetch_data(Request $request)
{
    if( $request->ajax() ) {
        $sort_by = $request->get('sortby');
        $sort_type = $request->get('sorttype');
        $comments = Comment::with('user', 'confirmerUser', 'product')
            ->orderBy($sort_by, $sort_type)->paginate(5);
        $p_pagenumber = $request['page'];
        return view("adminPanel.comment_list")
            ->with('p_pagenumber', $p_pagenumber)
            ->with('comments', $comments)
            ->render();
    }
}

В поле зрения

function fetch_data(page, sort_type, sort_by)
{
    $.ajax({
        url : "/admin/pagination/fetch_data?page=" + page + "&sortby=" + sort_by + "&sorttype=" + sort_type,
        success : function(data) {
            $("#table_data").html('');
            $("#table_data").html(data);
        }
    });
}

1 Ответ

0 голосов
/ 31 октября 2019

Я рекомендую использовать Коллекции Laravel для красноречивых связей.

$comments = Comment::with('user', 'confirmerUser', 'product')->get();
$comments = collect($comments)->sortBy($sort_by)->splice(5);

Использовать sortBy () или sortByDesc () для order и splice () для нумерация страниц

Надеюсь, это поможет. Ура!

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