首页 > 解决方案 > 未找到基表或视图:1146 表 'pht.location_id' 不存在

问题描述

我的数据库中没有此名称(location_id)的表,但它给了我错误。

“消息”:“SQLSTATE [42S02]:未找到基表或视图:1146 表 'pht.location_id' 不存在(SQL:选择locations.* location_id、. location_trails_idas pivot_location_trails_idlocation_id. location_idas pivot_location_idfrom locations inner join location_idon locations. id= location_id. location_idwhere location_id. location_trails_id in (11, 13, 15, 16, 121, 123, 124, 181))",

我找不到如何解决它。请帮我解决这个问题。提前致谢。

这是我的控制器的代码。

public function get($id)
{        
    $locations = LocationTrails::whereTrailId($id)->with('locations')->orderBy('ordered','ASC')->get();
    dd($locations);
    // $locations = Trail::findOrFail($id)->locations()->paginate($this->perPage);
    // dd($locations);

    $tdata = [];
    foreach($locations->items() as $location) {

        $hints = $location->hints;
        $hintsData = [];

        foreach($hints as $hint) {
            $hintsData[] = [
                'title' => $hint->title,
                'hint_text' => $hint->hint_text,
                'hint_solution_text' => $hint->hint_solution_text,
                'hint_image_path' => $hint->hint_image_path,
                'hint_video_path' => $hint->hint_video_path,
                'complexity_order' => $hint->complexity_order
            ];
        }

        $tdata[] = [
            'id' => $location->id,
            'title' => $location->title,
            'radius' => $location->radius,
            'latitude' => $location->latitude,
            'longitude' => $location->longitude,
            'rewards_points' => $location->rewards_points,
            'location_info_link' => $location->location_info_link,
            'hints' => $hintsData
        ];
    }

    $data = [];
    $data['data'] = $tdata;
    $data['meta']['paginator'] = $this->getPaginatorInfo($locations);

    return $data;
}

这是我的位置模型

class Location extends Model
{
protected $table = 'locations';

protected $fillable = [
    'title', 'radius', 'latitude', 'longitude', 'rewards_points', 'location_info_link', 'location_order'
];


/********************* RELATIONS *********************/

public function trails()
{
    return $this->belongsToMany(Trail::class);
}

public function hints()
{
    return $this->hasMany(LocationHint::class);
}

public function location_trails()
{
    return $this->belongsTo(LocationTrails::class,'location_id');
}

这是我的 locationtrail 模型:

class LocationTrails extends Model
{
protected $table = 'location_trail';

protected $fillable = [
    'location_id', 'trail_id', 'ordered', 'created_at', 'updated_at',
];


/********************* RELATIONS *********************/

public function trails()
{
    return $this->belongsToMany(Trail::class,'trail_id');
}

public function locations()
{
    return $this->belongsToMany(Location::class,'location_id');
}

标签: laravel

解决方案


问题出在您的LocationTrails模型中。您像这样定义您的方法$this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');,laravel 认为location_id是一个表名并抛出错误。

如果是一对多的关系。

public function locations()
{
    return $this->hasMany(Location::class,'location_id');
}

如果是多对多关系,那么您可以看到这一点。

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

你的trails()方法也一样。

public function trails()
{
    return $this->hasMany(Trail::class,'trail_id');
}

推荐阅读