Laravel: Красноречивые отношения не работают. Невозможно показать отношения в поле зрения - PullRequest
0 голосов
/ 02 ноября 2018

Я не могу отобразить отношения после того, как уже установил Eloquent Relationships в модели.

В модели: Art_obj

class Art_obj extends Model
{
    protected $table = 'art_objs';
    protected $fillable = ['Id_no','Artist','Year','Title','Description','Origin','Epoch','Picture','Type_of_art'];

    public function Painting(){
        return $this->hasOne(Painting::class,'Id_no');
    }

}

В модели: Картина

class Painting extends Model
{

    protected $table = 'paintings';
    protected $fillable = ['art_obj_Id_no','Paint_type','Drawn_on','Style'];

    public function Art_obj(){
        return $this->belongsTo(Art_obj::class,'Id_no');
    }

}

In PaintingController

public function index()
    {
        $paintings = Painting::with('Art_obj');
        return view('ArtObj.Painting', compact('paintings'));
    }

в Painting.blade.php

            <table class="table table-bordered table-striped"> 
                <tr> 
                    <th>Title</th>
                    <th>Paint type</th> 
                    <th>Drawn on</th>
                    <th>Style</th>
                    </tr> 
                        @foreach($paintings as $row) 
                    <tr> 
                    <td>{{$row->Art_obj->Title}}</td>
                    <td>{{$row['Paint_type']}}</td> 
                    <td>{{$row['Drawn_on']}}</td> 
                    <td>{{$row['Style']}}</td> 
                </tr> 
                @endforeach 
            </table> 

В поле зрения не отображается. введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы еще не получили данные. Измените ваш запрос на:

$paintings = Painting::with('Art_obj')->get();
0 голосов
/ 02 ноября 2018

Если вы не используете id в качестве первичного ключа вашей модели, вам необходимо установить свойство первичного ключа в ваших моделях:

protected $primaryKey = 'Id_no';

Eloquent также предполагает, что в каждой таблице есть столбец первичного ключа с именем id. Вы можете определить свойство protected $primaryKey для переопределения этого соглашения.

Кроме того, Eloquent предполагает, что первичный ключ является возрастающим целочисленным значением, что означает, что по умолчанию первичный ключ будет приведен к int автоматически. Если вы хотите использовать неинкрементный или нечисловой первичный ключ, вы должны установить для открытого свойства $ incrementing в вашей модели значение false. Если ваш первичный ключ не является целым числом, вам следует установить для свойства protected $keyType в вашей модели значение string.

Кроме того, отношение должно устанавливать правильные внешние ключи и ключи владельца:

public function Art_obj(){
    return $this->belongsTo(Art_obj::class,'Id_no', 'art_obj_Id_no');
}

и затем получить данные:

$paintings = Painting::with('Art_obj')->get();

Вы должны также проверить, существует ли отношение, прежде чем пытаться получить к нему доступ:

@foreach($paintings as $row) 
<tr> 
   @if (!is_null($row->Art_obj))
   <td>{{$row->Art_obj->Title}}</td>
   @else
   <td>No Title</td>
   @endif
   <td>{{$row->Paint_type}}</td> 
   <td>{{$row->Drawn_on}}</td> 
   <td>{{$row->Style}}</td> 
</tr> 
@endforeach 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...