Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Доброго времени суток всем.
Подскажите пожалуйста, почему конструкция типа:
$case = \App\Cases::where('no', $id)
->with(['providers.detail' => function ($query) {
$query->select('user_cards.name as prov_name', 'user_cards.code');
}])
->with(['providers.detail.country' => function ($query) {
$query->select('name');
}])
->with(['providers.detail.country.city' => function ($query) {
$query->select('name');
}])
->first();
создает вот такие запросы к базе:
2016-08-25T12:08:52.494900Z 404 Prepare select * from `assist` where `no` = ? limit 1
2016-08-25T12:08:52.495011Z 404 Execute select * from `assist` where `no` = '43022' limit 1
2016-08-25T12:08:52.495523Z 404 Close stmt
2016-08-25T12:08:52.496299Z 404 Prepare select * from `case_providers` where `case_providers`.`case_no` in (?)
2016-08-25T12:08:52.496342Z 404 Execute select * from `case_providers` where `case_providers`.`case_no` in (43022)
2016-08-25T12:08:52.496847Z 404 Close stmt
2016-08-25T12:08:52.497516Z 404 Prepare select * from `user_cards` where `user_cards`.`code` in (?)
2016-08-25T12:08:52.497646Z 404 Execute select * from `user_cards` where `user_cards`.`code` in (21822)
2016-08-25T12:08:52.498296Z 404 Close stmt
2016-08-25T12:08:52.498787Z 404 Prepare select * from `user_countries` where `user_countries`.`id` in (?)
2016-08-25T12:08:52.498858Z 404 Execute select * from `user_countries` where `user_countries`.`id` in (15)
2016-08-25T12:08:52.499176Z 404 Close stmt
2016-08-25T12:08:52.499651Z 404 Prepare select `name` from `user_cities` where `user_cities`.`country` in (?)
2016-08-25T12:08:52.499734Z 404 Execute select `name` from `user_cities` where `user_cities`.`country` in (15)
Почему поле name выбирается только в последнем случае с таблицей городов и игнорируются поля во всех остальных случаях?
Вообще задача получить имена провайдеров и их коды из user_cards, страну и город этого провайдера из user_countries/user_cities для одного случая.
Добрый день всем.
Такая ситуация, есть модель Cases, связанная с моделью Providers, которая в свою очередь связана с моделями Country/city и т.д.
получаю данные таким образом:
$case = \App\Cases::where('no', $id)->with('providers.detail.country.city')->first();
Но категорически не устраивает что при таких запросах идет полная выборка со всех таблиц.
Можно ли как-то задать поля для выборки В КАЖДОЙ связи?
Т.е. в datail надо взять только 2 поля code,name в country/city, взять только name.
Только для detail прописать могу:
$case = \App\Cases::where('no', $id)->with(['providers.detail'=> function ($query) {$query->select('user_cards.name', 'user_cards.code');}])->first();
но как теперь правильно дополнить дальше?
Поспешил задавать вопрос, разобрался сам ). Во первых это не hasMany а belongsToMany, ну а добавление/редактирование это
$user->country()->attach($country);
$user->country()->sync($country);
Доброго времени суток форумчане. Начинаю изучать laravel, сходу не осилил множественные отношения, прошу помощи ).
Ситуация, есть стандартная таблица users и есть таблица user_countries (id,name). Задача, каждому пользователю может быть назначено много стран. В итоге должна получится третья таблица в которой, хранятся user_id и id страны, разрешенной пользователю.
Сделал вот такой view для редактирования пользователя и назначенных ему стран:
@extends('admin_template')
@section('content')
<h1>Update user</h1>
{!! Form::model($user,['method' => 'PATCH','route'=>['users.update',$user->id]]) !!}
<input name="_token" type="hidden" value="{!! csrf_token() !!}" />
<div class="form-group">
{!! Form::label('Name', 'Name:') !!}
{!! Form::text('name',null,['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('Email', 'Email:') !!}
{!! Form::text('email',null,['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('Comments', 'Comments:') !!}
{!! Form::textarea('comments',null,['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('country_id', 'Country for user:') !!}
{!! Form::select('country_id[]',($country), null,['class' => 'selectpicker form-control','multiple' => 'multiple','tabindex'=>'-1']) !!}
</div>
<div class="form-group">
{!! Form::submit('Update', ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
@endsection
вот такой код в UserController
public function update($id) {
$userUpdate = Request::all();
$country=Request::get('country_id');
$country['user_id']=$id;
$user = User::find($id);
$user->update($userUpdate);
$user->country()->insert($country);
return redirect('users');
}
модель User
public function country() {
return $this->hasMany('App\Userincountries');
}
В итоге получаю вот такой запрос:
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: insert into `userincountries` (`0`, `1`, `2`, `user_id`) values (10, 372, 18, 2))
А это какая-то полная фигня ). Подскажите, как исправить ситуацию