Невозможность извлечь данные из отношений с Laravel - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь установить отношение один ко многим, но получаю следующую ошибку

Неопределенное свойство: stdClass :: $ client (View: C: \ wamp \ www \ intranet\ resources \ views \ users \ list.blade.php)

Проблема в том, что я работаю с существующей базой данных, которая в таблицах не имеет полей id, а внешние ключитакже типичные, такие как client_id

Моя модель Client.php

class Client extends Model
{
    protected $connection = 'dpnmwin';

    protected $table = 'nmundfunc';

    public function employee(){

        return $this->hasMany('App\Employee');

    }

}

Моя модель Employee.php

class Employee extends Model
{
    protected $connection = 'dpnmwin';

    protected $table = 'nmtrabajador';

    public function client(){

        return $this->belongsTo('App\Client', 'COD_UND');

    }
}

В поле nmtrabajador COD_UND будетбыть внешним ключом, который относится к nmundfunc.

И я пытаюсь получить данные следующим образом: {{$user->client->CEN_DESCRI}}.

, но это не выдает ошибку, как я могурешить это?

Мой контроллер, куда я отправляю в поле зрения

public function index(){

        $users = DB::connection('dpnmwin')->table('nmtrabajador')->where('CONDICION', '=', 'A')->get();

        return view('users.list',array(
            'users' => $users
        ));

    }

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

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

protected $primaryKey = 'your_primary_key';

Отношение выглядит хорошо, после этого вы должны убедиться, что $ user являетсяопределенный экземпляр Employee, поскольку ваша ошибка, вероятно, означает, что ваш экземпляр даже не был определен, поэтому, например, если вы используете list.blade.php, вам нужно изменить возврат вашего контроллера и указать, что вы хотите передать данные внапример, вы можете сделать это следующим образом:

return view('users.list', compact('user'));

Где пользователь - это экземпляр Employee, сохраненный в '$ user'

Обновление

Сначала вы должны убедиться, что ваш пользователь получен правильно, вы можете проверить его, поместив dd ($ user). И когда вы возвращаете представление, вы можете передать ему информацию, более чистый способ сделать то, что вы пытаетесь сделать, этото, что я написал ранее, чтобы у вас было что-то вроде этого:

public function index()
{
    $users = DB::table('nmtrabajador')
                 ->where('CONDICION', '=', 'A')
                 ->get();
    // dd($user) for debugging you are retrieving the user properly
    return view('users.list', compact($users));
}
0 голосов
/ 28 мая 2018

Вы должны вызвать базу по отношениям.

Этот код вернет вам данные.

Если у вас есть идентификатор, то вы можете найти по идентификатору, как показано ниже

$employee=Employee::find(1);

Или, если вы хотите получить все данные, вы можете вызвать все методы.

Employee::all();

И тогда вы можете просто получить их по отношению, как вы определили в моделях.

$client=$employee->client->CEN_DESCRI;

ПолучениеДанные из экземпляра основаны на методах, которые мы используем.Здесь, в этом ответе, вы можете получить, что

Свойство [title] не существует в этом экземпляре коллекции

Я надеюсь, что это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...