2016-10-11 2 views
0

Итак, у меня есть 3 таблицы: пользователи, клиенты и заказы.Сохранение во внешнем ключе пользователя внешнего ключа

Отношения и внешние ключи между каждым:

Пользователи hasOne Клиенты. Клиенты принадлежат пользователям. Users.id = Customers.user_id

Клиенты имеют многочисленные заказы. Бронирование принадлежит клиентам. Customers.id = Bookings.customer_id

В форме добавления при бронировании я хочу сохранить зарегистрированный идентификатор пользователя клиента в качестве клиента customer_id.

Поля:

В таблице пользователей:

-id
-username
-password
-role_id (connected to roles table) -created
-modified

В таблице Customers:

-id
-user_id (the foreign key connected to Users table)
-name
-created
-modified

В таблице Bookings:

-id
-customer_id (the foreign key connected to Customers table)
-payment_id (connected to payments table)
-created
-modified

+0

isnt пользователь == клиент? Что вы пробовали? Вы следовали соглашениям? –

+0

Пользователь и клиент отделены для целей безопасности. У пользователя есть имя пользователя и пароль, у Клиента есть имя и номер телефона. Я пробовал: $ customer = $ booking-> Customers-> findByuser_id ('Auth.User') -> first(); – mistaq

+0

Что в этом хорошего? –

ответ

1

Вы можете попробовать ниже с ода

$booking = $this->Booking->newEntity(); 
if ($this->request->is('post')) { 
    $data = $this->request->data; #Store post data to a variable 
    $customer_id = #Find and assign customer ID to a variable 
    $data['customer_id'] = $customer_id; #Assign customer ID to saving data 
    $booking = $this->Bookings->patchEntity($booking, $data); 
    if ($this->Bookings->save($booking)) { 
     #SAVING SUCCESS 
    } else { 
     #ERROR SAVING 
    } 
} 

Поиск кода клиента (модель загрузки)

$this->loadModel('Customers'); 
$logged_in_user_id = $this->Auth->user('id'); 
$customer = $this->Customers->find('all')->where(['user_id'=>$logged_in_user_id])->first(); 
$customer_id = $customer->id; #Or $customer['id']; 

Поиск идентификатора клиента (без нагрузки модели)

$logged_in_user_id = $this->Auth->user('id'); 
$customer = $this->Bookings->Customers->find('all')->where(['user_id'=>$logged_in_user_id])->first(); 
$customer_id = $customer->id; #Or $customer['id']; 
+0

Итак, с этой строкой: $ customer_id =, где я могу найти идентификатор клиента? Например, в режиме отладки, нажав на сеанс, а затем Auth показывает текущую информацию о пользователе, но не данные Клиента. – mistaq

+0

Дайте мне ваши таблицы таблиц 'fields' name @ W.Lau –

+0

Все еще получаю ошибку базы данных. Во всяком случае, я обновляю свой OP полями. – mistaq

0

Отъезд Footprint plugin, который обрабатывает именно эта проблема довольно прозрачно.

Смежные вопросы