Lavarel - Ошибка в отношении: вызов неопределенного отношения [nota] в модели [App \ Nota] - PullRequest
1 голос
/ 29 сентября 2019

Я хочу сделать следующий запрос с Eloquent:

$nota=DB::table('notas')
        ->join('users', 'users.id', '=', 'notas.id_user')
        ->select('notas.id','notas.nombre', 'notas.descripcion', 'users.name AS user_name', 'users.email')
        ->first();

Я пытаюсь установить отношение в моделях и называется так, в моем контроллере:

public function show($id)
{

    $nota = Nota::with(['user','nota'])->first();
    print_r($nota);

    return view("notas.detalle", compact("nota"));
}

Ноя получаю следующую ошибку:

Illuminate \ Database \ Eloquent \ RelationNotFoundException Вызов неопределенного отношения [nota] для модели [App \ Nota].

Мои модели выглядят так: Nota.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Nota extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

User.php:

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    public function notas()
    {
        return $this->hasMany('App\Nota');
    }    
}

Ответы [ 3 ]

1 голос
/ 29 сентября 2019

Проблема в вашем понимании отношений.Вы не делаете никаких отношений с именем nota, но вы используете это и смешно с той же моделью.Поэтому, во-первых, установите правильные отношения, используя соглашение об именах .

В Nota модель

public function user()
    {
        return $this->belongsTo('App\User','id_user');
    }

В User модель

public function notas()
    {
        return $this->hasMany('App\Nota','id_user');
    }

А теперь в контроллере

$nota = Nota::with('user')->first();

return view("notas.detalle", compact("nota"));

Смотри, это жадная загрузка.Вы также можете лениво загрузить отношения.

Теперь вы можете получить доступ к свойству объекта, например,

{{ $nota->nombre }} 

, и объекту отношения, например,

{{ $nota->user->email }}
.
0 голосов
/ 29 сентября 2019

Вы можете передать только пользователя, но nota, потому что nota модель уже называется.

use App\Nota;
use App\User;

          public function show($id)
          {
            $nota = Nota::with(['user'])->first();
            return view("notas.detalle", compact("nota"));
          }
0 голосов
/ 29 сентября 2019

Проблема с этой функцией Nota::with(['user','nota'])->first()

Почему вы хотите nota с nota.это звучит смешно, не так ли?

Так что просто удалите его, тогда все будет хорошо.

$nota = Nota::with(['user'])->first();

return view("notas.detalle", compact("nota"));
...