Laravel - Недопустимый тип смещения при доступе к свойству в отношении OneToMany. - PullRequest
0 голосов
/ 28 августа 2018

Я учусь использовать Laravel и отношения. У меня проблемы с доступом к данным из отношений hasMany, я понимаю, что это глупый вопрос. Это может быть повторяющийся вопрос, но я не нашел конкретного ответа, подобного этому.

У меня есть две модели: таблица продавца и таблица цен. У одного продавца есть много таблиц цен, так что это выглядит так:

На модели продавца

<?php

namespace App\Pedidos;

use Illuminate\Database\Eloquent\Model;

class Vendedores extends Model
{
    protected $connection = 'Pedidos';
    protected $primaryKey = 'CD_VENDEDOR';

    public function TabelaDePreco() {
        return $this->hasMany('\App\Pedidos\TabelaDePreco', 'CD_VENDEDOR', 'CD_VENDEDOR');
    }
}

По таблице цен модель

<?php

namespace App\Pedidos;

use Illuminate\Database\Eloquent\Model;

class TabelaDePreco extends Model
{
    protected $connection = 'Pedidos';
    protected $primaryKey = ['CD_VENDEDOR', 'CD_PRODUTO', 'CD_ESTADO'];

    public function Vendedores() {
        return $this->belongsTo('\App\Pedidos\Vendedores', 'CD_VENDEDOR', 'CD_VENDEDOR');
    }

}

На контроллере

public function index()
{
    $vendedores = Vendedores::all();
    return view('pedidos.tabeladepreco.index')
        ->with('title', 'Tabela de preços')
        ->with('vendedores', $vendedores);
}

На экране появится модель TabelaDePreco

@foreach($vendedores as $vendedor)
   @foreach ($vendedor->TabelaDePreco as $tabela)
       {{ dd($tabela) }}
   @endforeach

Вот распечатка из кода выше: модель TabelaDePreco

Как видите, данные загружаются в переменную $ tabela.

Если я попытаюсь напечатать в представлении {{$ tabela-> NR_LIMITE1}} , я получу ошибку недопустимого типа смещения. Как получить доступ к этому атрибуту, поскольку данные загружаются при использовании dd ()? Я пробовал $ tabela ['NR_LIMITE1'], но с той же ошибкой.

Что я делаю не так?

С наилучшими пожеланиями.

EDIT:

Как указал Джонас в комментариях, Laravel не будет поддерживать отношения, когда в одной из таблиц есть составные ключи. Вернуться к миграциям.

1 Ответ

0 голосов
/ 28 августа 2018

Вам нужно загрузить ваше отношение:

$vendedores = Vendedores::with('TabelaDePreco')->all();

    return view('pedidos.tabeladepreco.index')
        ->with('title', 'Tabela de preços')
        ->with('vendedores', $vendedores);

Может также случиться, что $vendedor->TabelaDePreco не определено, если с $vendedor не связано TabelaDePreco. Попробуйте добавить isset(). Также вещь о нумерации страниц, если у вас много записей.

...