@Dimon2x, ну только с одной стороны рассмотрел. Ведь ещё же в одной категории может быть много статей. А значит что? Значит со второй стороны должно быть тоже n. А если с обеих сторон n, то многие-ко-многим. МОжет я вечером неясно написал, но ты при составлении таких схем ты рассматриваешь вопрос с двух сторон, т.е. в данном случае, сколько категорий у статей сначала, рядом с категориями пишешь 1 или n (или конкретное число, такое тоже бывает), а потом смотришь в обратную сторону, сколько статей у категории, и соответственно уже ставишь число рядом с категориями. Understand?
PHP: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Category extends Model { public function article() { return $this->belongsToMany('App\Services\Image'); } } Как вывести статьи из пивотной таблицы с пагинатором? Делаю так, всё хорошо работает PHP: $aaa = Category::find(3); dd($aaa->article); Но если добавить с пагинатором, то будет ошибка PHP: $aaa = Category::find(3)::paginate(2); dd($aaa->article); Код (Text): Undefined property: Illuminate\Pagination\LengthAwarePaginator::$article
Ты хоть пытаешься понять смысл того, что пишешь? Или ты просто так пишешь? Category::find(3) - это одна модель, а не много моделей. Зачем тебе одну модель пагинировать? А если ты много категорий получишь, то у каждой будет свой article, но не у всех сразу. И пагинатор ничего про твои связи естественно не знает, надо из него получить конкретную модель и работать дальше, если нужно.
Какой огромный список? Category::find(3) возвращает одну модель, одну категорию с id 3. Всё. И у тебя имено в таком виде работает? С двумя двоеточиями?
@mkramer с двумя --- Добавлено --- Я кажись начинаю понимать, надо сначала как-то зайти в метод article, а потом уже указывать пагинацию
разложи цепочку вызовов на отдельные шаги и в отладчике посмотри какого типа результат возвращает каждый метод. это тебя просветлит! --- Добавлено --- ( хотя врядли )
@ElisDN ты дал ему решение в то время как его ведут к умению находить их самостоятельно. Хотя я согласен, что пора уже менять тактику.
@igordata @ElisDN я так вчера делал, только без сортировки и почему-то не работало, вечером опять попробую --- Добавлено --- @artoodetoo я так каждый раз делаю
@ElisDN @romach @nospiou @artoodetoo @igordata @mkramer Надо вывести список постов, к какой категории относится пост, я это сделал с помощью построителя, так как не знаю, как это сделать, через ORM. 3 таблицы: categories -id -name images -id -image -description category_image (промежуточная) -image_id -category_id PHP: public function getCategoryTitle($id) { $post = DB::table('category_image') ->where('image_id', '=', $id) ->get(); $categoryImage = $post->toArray()[0]->category_id; $showCategory = DB::table('categories') ->where('id', '=', $categoryImage) ->get(); return $showCategory->toArray()[0]->name; } Сейчас получается, что на каждый пост, будет ещё 2 запроса в базу, а это очень нехорошо. --- Добавлено --- посты вывожу так PHP: public function index() { $posts = Image::all(); return view('admin.posts.index', ['posts'=>$posts]); } PHP: @foreach($posts as $post) <tr> <td>{{$post->id}}</td> <td>{{$post->description}}</td> <td>{{$post->getCategoryTitle($post->id)}}</td> <td>
Пробую так, в модели постов PHP: dd( $this->belongsToMany( Category::class, 'category_image', 'image_id', 'category_id', 1 )); А как теперь вывести имя категории? --- Добавлено --- Код (Text): шина BelongsToMany {#494 ▼ #table: "category_image" #foreignPivotKey: "image_id" #relatedPivotKey: "category_id" #parentKey: 1 #relatedKey: "id" #relationName: "getCategoryTitle" #pivotColumns: [] #pivotWheres: [] #pivotWhereIns: [] #pivotValues: [] +withTimestamps: false #pivotCreatedAt: null #pivotUpdatedAt: null #using: null #accessor: "pivot" #query: Builder {#493 ▶} #parent: Image {#473 ▶} #related: Category {#490 ▶} }
У тебя отношения "многие-ко-многим", значит у каждого изображения (почему ты упорно пишешь пост, а таблицу назвал images?) несколько категорий, а не одна. А дальше вообще какая-то у тебя магия вуду в коде.... --- Добавлено --- Сделать belongsToMany (только по человечески) и жадную загрузку https://laravel.com/docs/master/eloquent-relationships#eager-loading
мне на стековерфлов ответили in image model PHP: public function categories(){ return $this->belongsToMany(Category::class) } in category model PHP: public function images(){ return $this->belongsToMany(Image::class) } with() for eager loading, provides you to get categories in single query PHP: $posts = Image::with("categories")->get(); foreach($posts as $post) { foreach ($post->categories as $category){ $category->name } } --- Добавлено --- Теперь работает, как надо --- Добавлено --- Сразу всю доку сложно усвоить
да, но можешь ли ты это воспроизвести, не подглядывая? т.е. понял ли ты. а то так-то мне в линуксе ответили, как ядро написать.