Как сделать отношения в cakephp3 - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь установить связь между таблицами, но не могу понять, что я делаю неправильно.

Я прочитал документацию в cakephp3 и тонны сообщений в stackoverflow, но все еще не могу получить никакого результата.

         --------------------------
name    |invoices     |shares      |
var     |id           |id          |
var     |             |idBill      |
         --------------------------

Отношение должно быть от idBill в акциях и id в счетах

class SharesTable extends Table {
    public function initialize(array $config) {
        parent::initialize($config);

        $this->belongsTo('invoices', [
        'className' => 'App\Model\Table\InvoicesTable',
        'foreignKey' => 'idBill',
        'targetForeignKey' => 'id'
        ]);
    }
}

А в контроллере попробуйте распечатать счет, связанный с акцией, вот так:

public function view($id = null)
{
    $share = $this->Shares->get($id, [
      'contain' => []
    ]);
    var_dump( $share->invoices );

    $this->set('share', $share);
}

Я просто ожидаю распечатать счет, но я всегда получаю ноль

1 Ответ

1 голос
/ 12 июня 2019

Ваш contain пуст, поэтому вы не получите никаких ассоциаций.Кроме того, имя свойства объекта по умолчанию для ассоциаций belongsTohasOne) - это выделенный, подчеркнутый вариант имени ассоциации, т. Е. invoice, а не invoices.

. Рекомендуется также использовать ассоциациюимена, которые совпадают с псевдонимом таблицы, то есть Invoices (с большой буквы I) для InvoicesTable, таким образом, он автоматически найдет класс, и вам не нужно указывать его с помощью опции className (также отсутствует опция targetForeignKey для belongsTo связей).

$this->belongsTo('Invoices', [
    'foreignKey' => 'idBill'
]);
$share = $this->Shares->get($id, [
  'contain' => ['Invoices']
]);

debug($share->invoice);

См. также

...