Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Запрос » 25.08.2016 15:28:57

NeCoRo
Ответов: 0

Доброго времени суток всем.
Подскажите пожалуйста, почему конструкция типа:

        $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 для одного случая.

#2 Laravel 5.x » querybilder » 27.07.2016 17:04:05

NeCoRo
Ответов: 0

Добрый день всем.
Такая ситуация, есть модель 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();

но как теперь правильно дополнить дальше?

#3 Re: Laravel 5.x » Снова один ко многим (hasMany) » 01.11.2015 00:48:03

Поспешил задавать вопрос, разобрался сам ). Во первых это не hasMany а belongsToMany, ну а добавление/редактирование это
$user->country()->attach($country);
$user->country()->sync($country);

#4 Laravel 5.x » Снова один ко многим (hasMany) » 31.10.2015 12:44:50

NeCoRo
Ответов: 1

Доброго времени суток форумчане. Начинаю изучать 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))

А это какая-то полная фигня ). Подскажите, как исправить ситуацию

Подвал раздела