使用雄辩的un laravel后显示为空

时间:2019-03-02 11:41:47

标签: php laravel orm eloquent

我的项目中有MyRoom.phpTotalCity.php,其中每个房间都分类在城市中

这样我就在MyRoom.php中做到了

public function location()
{
    return $this->belongsTo(TotalCity::class, 'location_id')->withTrashed();
}

而我在TotalCity.php中做到了

public function location()
{
    return $this->hasMany(MyRoom::class , 'total_city_id')->withTrashed();
}

我已经像这样通过路由和控制器传递了id home.blade.php     id)}}“> {{$ row-> name}}

web.php

Route::get('/city/{id}/rooms/','SiteController@room')->name('room');

SiteController.php

public function room($id) {
    $room = TotalCity::find($id)->location;
    return view('frontend.pages.rooms', compact('room'));
}

rooms.blade.php

@foreach($room as $row)
        <div class="room">
            <a href="{{ route('description',$row->id) }}"><img src="{{ asset(env('UPLOAD_PATH').'/' . $row['photoi1']) }}"/></a>
        </div>
        @endforeach

但是,当我将城市和房间存储在数据库中特定城市之下时,这不会显示任何城市中的任何房间。

3 个答案:

答案 0 :(得分:0)

在关联方法中,您还应该提及外键和所有者键, 例如在MyRoom.php中:

public function location()
{
    return $this->belongsTo(TotalCity::class, 'location_id', 'total_city_primary_key')->withTrashed();
}

您可以阅读laravel documentioation以获得更多详细信息。

答案 1 :(得分:0)

TotalCity模型中的foreignKey错误:

public function location(){
    return $this->hasMany(MyRoom::class, 'location_id')->withTrashed();
}

答案 2 :(得分:0)

我强烈建议您将模型的名称更改为城市房间。如果不想,请确保在两个模型中都将它们连接到正确的表,可以在两个模型中使用$table变量来实现这一点,例如:

$table = 'your_table_name';

这将确保桌子连接正确。

此外,您应该进行一些更改:

在您的 TotalCity 模型中,执行以下操作:

public function rooms()
{
    return $this->hasMany(MyRoom::class , 'total_city_id')->withTrashed();
}

在您的 MyRoom 模型中,执行以下操作:

public function city()
{
    return $this->belongsTo(TotalCity::class)->withTrashed();
}

在您的 SiteController 中执行以下操作:

public function room($id) {
    $rooms = TotalCity::find($id)->rooms;
    return view('frontend.pages.rooms', compact('rooms'));
}

在您的视图

@foreach($rooms as $room)
        <h2>{{$room->name}}</h2>
        <div class="room">
            <a href="{{ route('description',$room->id) }}"><img src="{{ asset(env('UPLOAD_PATH').'/' . $room['photoi1']) }}"/></a>
        </div>
@endforeach