Я пытаюсь сделать выбор с помощью определенных таблиц в базе данных.PHP Laravel 5.1 - Красноречивый выбор с использованием «with()» не работает
Здесь модель "Funcionario":
class Funcionario extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'funcionarios';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['nome', 'matricula', 'pis_pasep', 'data_admissao', 'data_demissao', 'data_nascimento', 'apelido', 'sexo_id', 'setor_id', 'cargo_id', 'turno_id'];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function cargo()
{
return $this->belongsTo('App\Cargo');
}
}
Вот "Cargo" Модель:
class Cargo extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'cargos';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['nome'];
/**
* Belongs to 'funcionarios' relationship
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function funcionario()
{
return $this->hasMany('App\Funcionario');
}
}
Это то, что я пытаюсь в настоящее время:
public function showMyEmployees(){
$data = Funcionario::where('supervisor_id', $user->id)
->with([
'cargo' => function($query){
$query->select('nome'); // $query->pluck('nome'); // $query->get(['nome']);
}
])
->orderBy('nome')
->get();
return response()->json($data, 200);
}
Что Я получаю:
{
"id": 1648,
"nome": "ADOLFO ARAUJO DOS SANTOS JUNIOR",
"matricula": 14311,
"pis_pasep": 0,
"data_admissao": "1970-01-01",
"data_demissao": "1970-01-01",
"data_nascimento": null,
"apelido": null,
"supervisor_id": 1105,
"coordenador_id": null,
"gerente_id": null,
"diretor_id": null,
"sexo_id": null,
"setor_id": 36,
"cargo_id": 56,
"turno_id": null,
"created_at": "2015-09-15 14:49:32",
"updated_at": "2015-09-15 15:58:36",
"cargo": null
}
И «груз» должен иметь значение, не равное нулю.
Если я не использую закрытие в избранном красноречии, он возвращается с «ном» в «груз».
Как это:
{
"id": 1648,
"nome": "ADOLFO ARAUJO DOS SANTOS JUNIOR",
"matricula": 14311,
"pis_pasep": 0,
"data_admissao": "1970-01-01",
"data_demissao": "1970-01-01",
"data_nascimento": null,
"apelido": null,
"supervisor_id": 1105,
"coordenador_id": null,
"gerente_id": null,
"diretor_id": null,
"sexo_id": null,
"setor_id": 36,
"cargo_id": 56,
"turno_id": null,
"created_at": "2015-09-15 14:49:32",
"updated_at": "2015-09-15 15:58:36",
"cargo": {
"id": 56,
"nome": "AUXILIAR DE PRODUCAO",
"created_at": "2015-09-15 14:47:18",
"updated_at": "2015-09-15 14:47:18"
}
..И это то, что я хочу:
{
"id": 1648,
"nome": "ADOLFO ARAUJO DOS SANTOS JUNIOR",
"matricula": 14311,
"pis_pasep": 0,
"data_admissao": "1970-01-01",
"data_demissao": "1970-01-01",
"data_nascimento": null,
"apelido": null,
"supervisor_id": 1105,
"coordenador_id": null,
"gerente_id": null,
"diretor_id": null,
"sexo_id": null,
"setor_id": 36,
"cargo_id": 56,
"turno_id": null,
"created_at": "2015-09-15 14:49:32",
"updated_at": "2015-09-15 15:58:36",
"cargo": "AUXILIAR DE PRODUCAO"
}
Спасибо!
Я пытался избежать использования класса DB ... Я думаю, что лил загрязнен (личное мнение). В любом случае, я собираюсь использовать цикл foreach. Что-то вроде «foreach ($ resultado as $ it) {$ it-> cargo = $ it-> cargo-> nome;}". –
Согласен. Красноречивый - это потрясающе, но он не может сделать все, поэтому (не) часто вы окажетесь в ситуации, когда вам нужно использовать фасад БД. –
В любом случае ваш ответ работает! UP! Спасибо, Крис! –