【问题标题】:Yajra Relationship Call to undefined relationship [XXX_id] on model [App\XXX]Yajra 关系调用模型 [App\XXX] 上的未定义关系 [XXX_id]
【发布时间】:2017-11-14 11:51:05
【问题描述】:

我收到如下错误 调用模型 [App\Room] 上的未定义关系 [hotel_id]

模型文件Hotel.php

class Hotel extends Model {
    protected $primaryKey = 'id';
    protected $fillable   = ['hotel_name', 'hotel_area'];
    public function room() {
        return $this->hasMany('App\Room', 'hotel_id');
    }
}

模型档案室.php

class Room extends Model {
    protected $primaryKey = 'id';
    protected $fillable   = ['hotel_id', 'room_name', 'bonus_sum'];
    public function hotel() {
        return $this->belongsTo('App\Hotel', 'hotel_id');
    }
}

控制器文件 RoomController.php

public function apiRoom() {
        $rooms = Room::with('hotel');
        return Datatables::eloquent($rooms)
            ->addColumn('action', function ($rooms) {
                return '<a onclick="editForm('.$rooms->id.')" data-toggle="tooltip" data-original-title="Edit"> <i class="fa fa-pencil text-inverse m-r-10"></i> </a>'.
                '<a onclick="deleteData('.$rooms->id.')" data-toggle="tooltip" data-original-title="Close"> <i class="fa fa-close text-danger"></i> </a>';
            })
            ->escapeColumns()
            ->toJson();

路由文件web.php

Route::get('rooms-list', 'RoomController@list');
Route::resource('room', 'RoomController', [
        'except' => ['create']
    ]);
Route::get('api/room', 'RoomController@apiRoom')->name('api.room');

迁移 create_new_room

$table->increments('id');
$table->integer('hotel_id')->unsigned();
        $table->foreign('hotel_id')->references('id')->on('hotels')->onDelete('cascade');
$table->string('room_name');
$table->string('bonus_sum');
$table->timestamps();

查看文件

$('#room-table').DataTable({
  processing: true,
  serverSide: true,
  ajax: "{{ route('api.room') }}",
  columns: [
    {data: 'id', name: 'id'},
    {data: 'hotel.hotel_name', name: 'hotel.hotel_name'},
    {data: 'room_name', name: 'room_name'},
    {data: 'bonus_sum', name: 'bonus_sum'},
    {data: 'action', name: 'action', orderable: false, searchable: false}
  ]
});

它与数据库无关。 ajax文件可能有错误。

【问题讨论】:

    标签: ajax laravel yajra-datatable


    【解决方案1】:

    Hotel 类中的 hasMany 定义不正确。

    根据 API 文档 here,您需要传递 Room 类的实例。

    public function room() {
        return $this->hasMany(App\Room::class, 'hotel_id');
        // OR
        return $this->hasMany('App\Room', 'hotel_id');
    }
    

    同样适用于您的 Room 课程。

    public function hotel() {
        return $this->belongsTo(App\Hotel::class, 'hotel_id');
        // OR
        return $this->belongsTo('App\Hotel', 'hotel_id');
    }
    

    -- 编辑--

    在评论上,belongsTo 函数的定义是:
    belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null)

    要使Room 类上的hotel() 关系起作用,您需要将相关模型键作为第二个参数传递。你应该这样写:

    public function hotel() {
        return $this->belongsTo('App\Hotel', 'id', 'hotel_id');
    }
    

    【讨论】:

    • 好的,谢谢。我已经更新了你提到的部分但是错误仍然存​​在
    猜你喜欢
    • 2020-01-28
    • 2018-05-23
    • 2019-11-17
    • 1970-01-01
    • 2020-01-31
    • 2019-12-01
    • 2020-06-20
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多