Отношения между таблицами в laravel с использованием пакета backpack

Я использую пакет рюкзак CRUD для создания своего проекта веб-сайта в laravel 5.2.

Я хочу установить связь между двумя таблицами. Первая таблица называется клиентом, а вторая таблица называется транзакцией. У каждого клиента много транзакций (отношение 1: N).

Запись в таблице клиентов:

ID Имя

123456 xyz

Запись в таблице транзакций:

ID CustomerID

101010 123456

Я знаю, что мне нужно указать отношение в модели клиента. Но как я могу отобразить результат отношения в CRUD?


person user2121603    schedule 25.08.2016    source источник


Ответы (3)


У вас должны быть отношения как в модели транзакции, так и в модели клиента, поэтому вы можете делать $customer->transactions и $transaction->customer:

class Customer extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function transactions()
    {
        return $this->hasMany('App\Transactions', 'CustomerID', 'ID');
    }
}

а также

class Transaction extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function customer()
    {
        return $this->belongsTo('App\Customer', 'CustomerID', 'ID');
    }
}

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

Чтобы отобразить взаимосвязь в CRUD, вы можете затем использовать столбец выбора Backpack введите, чтобы отобразить его в виде таблицы, и выберите или select2 типы полей чтобы отобразить его в представлениях добавления / редактирования. Прочтите Пример объекта CRUD, чтобы лучше понять, как это работает.

person tabacitu    schedule 27.08.2016

Прежде всего, когда вы создаете миграции для обеих таблиц, таблица, содержащая внешний ключ (FK), должна иметь такое поле:

public function up(){
   $table->increments('id');
   $table->integer('customerID')->unsigned();
}

После этого вам нужно вызвать следующую команду в консоли

php artisan migrate

Далее идут следующие команды:

php arisan backpack:crud customers
php arisan backpack:crud transactions

После этого вам нужно определить функции в моделях, которые возвращают значения из других таблиц. Модели клиентов должны иметь следующую функцию

public function transactions(){
   return $this->hasMany('Transaction');
}

Модель транзакции должна иметь следующую функцию

public function customer() {
    return $this->belongsTo('Customer');
}

Затем вы должны добавить поле CRUD в контроллер клиента, чтобы отображать транзакции в поле выбора.

$this->crud->addField([
   'label' => 'Transactions', // Label for HTML form field
   'type'  => 'select2',  // HTML element which displaying transactions
   'name'  => 'customerID', // Table column which is FK for Customer table
   'entity'=> 'customer', // Function (method) in Customer model which return transactions
   'attribute' => 'ID', // Column which user see in select box
   'model' => 'Transaction' // Model which contain FK
]);

Надеюсь это поможет :)

person Nenad Živanović    schedule 01.09.2016

После того, как вы построили множество отношений с транзакцией, вы можете получить результаты.

$customer=Customer::where(['id'=>'123456'])->with('transaction')
                                           ->first();

print_r($customer->Name);  // gives the customer name
foreach($customer->transaction as $cid)
{
     print_r($cid->CustomerID);       // gives the customer id
}

Всегда полезно Laravel Relationships Documentation. Пройти через это.

person Sanzeeb Aryal    schedule 27.08.2016