У меня 4 стола:
партнеры пользователи телефоны адреса
После того, как пользователь вошел в систему, я хочу быть уверенным, что в запросе возвращаются только записи, связанные с его (id).
Итак, когда я запрашиваю партнера, я хочу вернуть не только данные для соответствия партнера (id), но также убедиться, что пользователи (id) соответствуют fk (user_id) в партнерах.
Теперь, для еще одного уровня сложности, я хотел бы знать, могу ли я запросить партнера (соответствующий id и user_id), а также получить их основной телефон и основной адрес из соответствующих таблиц телефонов и адресов. Итак, возможно ли это, используя красноречие и структуру таблицы, которую я изложил ниже?
контроллер партнеров (PartnersController.php)
public function show($id)
{
$data = Partners::find($id)->where('user_id', Auth::user()->id)->first();
$phone = Partners::find(1)->phone;
//var_dump($phone);
return View::make('partners.showone')
->with('data', $data)
->with('phone', $phone)
->with('title', "$data->firstName $data->lastName")
->with('breadcrumb', "$data->firstName $data->lastName");
}
в идеале я хотел бы просто вытащить одну запись в таблице телефонов, которая соответствует этому значению primaryPhone из массива $ data. Возможно ли это при одновременном обеспечении соответствия user_id user () -> id?
вид (showone.blade.php)
Как мне представить эти данные в представлении? Если телефоны представляют собой массив (как это было бы выше), я предполагаю, что следующее будет работать
@foreach($phone as $ph)
<option value="{{ $ph->id }}"
@if($ph->id == $data->primaryPhone) {{ "selected" }}
@endif
> {{ $ph->number }} - {{ $ph->description }}</option>
@endforeach
Модель партнеров (Partners.php)
public function phone()
{
return $this->hasMany('Phone', 'partner_id')->where('user_id', Auth::user()->id);
}
public function primaryPhone($id)
{
return $this->has('Phone', 'id')->where('user_id', Auth::user()->id);
}
СТРУКТУРЫ ТАБЛИЦ
CREATE TABLE `partners` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`firstName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`lastName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`spouseName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`primaryPhone` int(11) NOT NULL,
`primaryAddress` int(11) NOT NULL,
`primaryEmail` int(11) NOT NULL,
`greeting` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`birthDate` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`spouseBirthDate` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`anniversary` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`notes` text COLLATE utf8_unicode_ci NOT NULL,
`profession` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`spouseProfession` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`pNewsletter` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`eNewsletter` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`partnerStatus` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`photoUrl` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `partners_id_unique` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `phones` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`number` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `phones_id_unique` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `addresses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`city` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`state` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`country` int(11) NOT NULL,
`postalcode` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`address_1` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`address_2` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `addresses_id_unique` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`firstName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`lastName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`phoneNumber` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `users_id_unique` (`id`),
UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;