Попытка получить несколько строк из базы данных с помощью внешнего ключа в Laravel - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь получить несколько изображений и отобразить их из таблицы базы данных multi_image, у которой есть внешние ключи, которые ссылаются на строку в таблице posts

Каждая строка в таблице postsсвязан с одним пользователем, но у пользователя может быть много сообщений 1: M отношение

Каждая строка в post может иметь несколько изображений (максимум до 4 изображений), но изображение может принадлежать только одному сообщению 1: Mснова

PostsController.php

<?php

namespace App\Http\Controllers;
use App\Multi_image;
use App\Post;

use App\User;
use DB;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;
use function Sodium\compare;

class PostsController extends Controller
{
public function __construct()
{
    $this->middleware('auth');
}

public function show(\App\Post $post)
{
    $postId = $post->id;
    $mImage = DB::table('multi_image')->where('post_id', $postId)->pluck('image');
    $postsIm = Post::whereIn('id', $mImage)->paginate(5);
    return view('posts.show', compact('post', 'mImage'));
}

Post.php

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $guarded = [];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function images()
    {
        return $this->hasMany(Multi_image::class);
    }
}

Multi_image.php

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Multi_image extends Model
{
    protected $table = "multi_image";

    public function post()
    {
        return $this->belongsTo('App\Post', 'post_id');
    }
}

show.blade.php

  @foreach($mImage as $image)
        <div class="details_image">
            <div class="details_image_thumbnails d-flex flex-row align-items-start justify-content-between">
                <div class="details_image_thumbnail" data-image=""><img src="{{ URL::to('/') }}/images/{{$image }}" alt=""></div>
            </div>
        </div>
        @endforeach
    </div>
    <div class="col-5">
        <img src="{{ URL::to('/') }}/images/{{$mImage->first() }}" class="w-100">
    </div>
                            .
                            .
                            .

сообщений таблица сообщений

multi_image таблица multi_image

РЕШЕНИЕ

Вопрос был исправлен с рабочим кодом

Специальнокод, который сделал это работает: обзор show () в PostsController.php

1 Ответ

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

Он не определен, потому что вы его нигде не определили. Попробуйте использовать App\Multi_image::all() as $image в вашем foreach.

Кроме того, кажется, что ваши классы моделей имеют неправильные имена. Вы должны были назвать их MultiImage и т. Д. - форма единственного числа, а таблицы в БД во множественном числе - multi_images.

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