首页 文章

未找到laravel列:1054未知列'image_likes.gallery_image_id'

提问于
浏览
0

我收到以下错误:

找不到列:1054'where子句'中的未知列'image_likes.gallery_image_id'(SQL:select * from image_likes其中image_likes.gallery_image_id in(1)and deleted_at为null且user_id = 1且image_likes.deleted_at为null)

每当我添加 function ($query) .

下面的代码行获取数据,但我需要数据来获取与之对应的相似内容 .

$images = GalleryImage::with('user')->get()

这就是我到目前为止所拥有的 .

ImageLike.php

<?php

namespace App;

use App\GalleryImage;
use App\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class ImageLike extends Model
{
    use SoftDeletes;

    protected $fillable = [
        'user_id',
        'image_id'
    ];

}

ImageController.php

public function getImages()
{

    $images = GalleryImage::with('user')
                        ->with(['likes' => function ($query) {
                                    $query->whereNull('deleted_at');
                                    $query->where('user_id', auth()->user()->id);

                        }])->get(); 


    return response()->json($images); 
}

GalleryImage.php

<?php

namespace App;

use App\User;
use App\GalleryImage;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;

class GalleryImage extends Authenticatable
{
    protected $fillable = [
        'image_title',
        'user_id',
        'file_name', 
        'created_at'
    ];

    protected $table = 'images';


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

    public function likes()
    {
         return $this->hasMany(ImageLike::class);
    }

    public function likedByMe()
    {
        foreach($this->likes as $like) {
            if ($like->user_id == auth()->id()){
                return true;
            }
        }
        return false;
    }


}

2 回答

  • 2

    更改您在模型GalleryImage中的关系 likes

    public function likes()
    {
       return $this->hasMany(ImageLike::class, 'image_id'); //here image_id is reference id of images table to likes table
    }
    

    默认laravel假设您的模型名称和_id为外键,因此它在 ImageLike 模型中为您的GalleryImage模型寻找 gallery_image_id 但是您有 image_id . 因此,如果您有非默认值,则将其与关系进行特定 .

    return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
    

    查看详情

    https://laravel.com/docs/5.6/eloquent-relationships#one-to-many

  • 3
    public function likedByMe()
    {
        return $this->likes()->whereUserId(auth()->id)->count()>0;
    }
    

    这不是关于你的问题,但你可以更有效地重写这样的 likedByMe()

相关问题