Как я использую отношения в шаблоне блейда (hasOne) || Ларавель

Хорошо, я пытаюсь получить «лайки» и «пользователей» в сообщениях по отношениям hasOne.

вот мой Post.php класс модели Posts extends Model { protected $table = 'posts';

public function User()
{
    return $this->hasOne(User::class, 'id', 'user_id');
}

public function Like()
{
    return $this->hasOne(Like::class, 'post_id', 'id');
}}

Шаблон моего клинка

@foreach ($showdeals as $deal)


                                <div class="tab-pane active" id="home" role="tabpanel">
                                    <div class="card-body">
                                        <div class="profiletimeline">

                                            {{$deal->like->status}}
                                            <br>
                                            {{$deal->user->email}}

                        <div class="sl-item">
                            <div class="sl-left"> <img src=" {{asset( '/assets/images/users/2.jpg')}}" alt="user" class="img-circle"> </div>
                            <div class="sl-right">
                                <div> <a href="#" class="link">{{$deal->user->username}}</a> || {{$deal->subject}} <Br> <span class="sl-date">{{$deal->created_at}}</span>
                                    <div class="m-t-20 row">
                                        <div class="col-md-3 col-xs-12"><img src="{{$deal->image}}" alt="user" class="img-responsive radius"></div>
                                        <div class="col-md-9 col-xs-12">
                                            <p> {{$deal->body}} </p> <a href="{{$deal->link}}" class="btn btn-success"> עבור למוצר </a></div>
                                    </div>
                                    <div class="like-comm m-t-20"> <a href="javascript:void(0)" class="link m-r-10">2 תגובות</a> <a href="javascript:void(0)" class="link m-r-10"><i class="fa fa-heart text-danger"></i> 5 לייקים</a> </div>
                                </div>
                            </div>
                        </div>




                    </div>
                    <hr></div>
            </div>

                @endforeach

И есть мой контроллер

класс PostsController расширяет контроллер {

public function showdeals()
{

    $showdeals = Posts::with( 'User', 'Like')->get();
        return view('posts.show', compact('showdeals'));
}




public function helpnewview(){
    return view('posts.anew');
}


public function helpnew(Request $request){
    //User pick link
    $userlink = $request['userlink'];
    return \Redirect::route('newdeal', compact('userlink'));
}



public function new(Request $request)
{
    //Emdeb user link
    $link = Embed::create($request['userlink']);
    $linke = $request['userlink'];
    return view('posts.new', compact('link', 'userlink', 'linke'));
}




public function create(Request $request)
{

    $posts = New Posts;
    $posts->user_id = Auth::User()->id;
    $posts->subject = $request['subject'];
    $posts->body = $request['body'];
    $posts->link = $request['link'];
    $posts->price = $request['price'];
    $posts->image = $request['image'];
    $posts->tag = $request['tag'];
    $posts->save();

    return back();
}

}

Теперь, если я сделаю что-то вроде {{$deal->user->email}}, это сработает, если я перейду к чему-то вроде этого {{$deal->like->status}}, это не сработает, я что-то упустил?


person Liel Dahan    schedule 09.02.2018    source источник
comment
Я вижу много проблем с заглавными буквами, не знаю, может ли это испортить ваш код.   -  person Nikola Gavric    schedule 10.02.2018
comment
нет, это хорошо, и без заглавных слов то же самое.   -  person Liel Dahan    schedule 10.02.2018
comment
а также с {{$deal->like}} я получаю {"id":1,"user_id":1,"post_id":1,"status":0,"created_at":"2018-02-09 20:19:30","updated_at":"2018-02-09 20:19:30"}   -  person Liel Dahan    schedule 10.02.2018
comment
Вы просто неправильно определили отношения, посмотрите на ответ   -  person Nikola Gavric    schedule 10.02.2018


Ответы (3)


Если вы хотите, чтобы несколько связей загружались с готовностью, вам нужно использовать массив отношений: Model::with(['rl1', 'rl2'])->get();

public function showdeals()
{
    ...
    $showdeals = Posts::with(['User', 'Like'])->get();
    ...
}

ИЗМЕНИТЬ:

Из этого json в комментариях, которые я вижу, в вашей модели Like нет атрибута с именем status, так что, вероятно, это корень проблемы.

person Nikola Gavric    schedule 09.02.2018
comment
Спасибо за ответ, я добавляю [] и все равно. с {{$deal->like}} я получаю {"id":1,"user_id":1,"post_id":1,"status":0,"created_at":"2018-02-09 20:19:30","updated_at":"2018-02-09 20:19:30"} - person Liel Dahan; 10.02.2018
comment
Можете ли вы включить свою модель Like в свой вопрос? - person Nikola Gavric; 10.02.2018
comment
Из того json, что вы опубликовали, кажется, что ваша Like модель не имеет свойства status @LielDahan - person Nikola Gavric; 10.02.2018
comment
он имеет статус: 0 - person Liel Dahan; 10.02.2018
comment
Так это выдает ошибку или это поле пустое, когда вы печатаете в html? - person Nikola Gavric; 10.02.2018
comment
Да, это говорит, что идентификатор, например, не существует. - person Liel Dahan; 11.02.2018

Контроллер редактирует этот код

  public function showdeals()
 {
        $showdeals = Posts::all();
        return view('posts.show', compact('showdeals'));
 }

И код блейд-файла

 @foreach ($showdeals as $deal)
                            <div class="tab-pane active" id="home" role="tabpanel">
                                <div class="card-body">
                                    <div class="profiletimeline">

                                        {{ $deal->Like->status }}
                                        <br>
                                        {{ $deal->User->email }}

   @endforeach
person Boghani Chirag    schedule 11.02.2018

Я думаю, все хорошо, кроме

{{$deal->лайк->статус}}
{{$deal->пользователь->адрес электронной почты}}

Пожалуйста, попробуйте как

{{$deal->Like()->status}} 
<br> 
{{$deal->User()->email}}
person Md Rasel Ahmed    schedule 11.02.2018