with update tablas relacionadas obtener hacer filtro delete datos create consultas como laravel laravel-4 filtering eloquent pivot-table

laravel - update - Cómo filtrar una tabla dinámica con Eloquent?



obtener datos de tablas relacionadas laravel (3)

Cada vez que llamas con withPivot(''foo'') , Laravel lo haces:

SELECT ... `table`.`foo` AS `pivot_foo` FROM `table` ...

Respuesta arreglada:

MySQL, en particular, permite el uso de alias de columna en las cláusulas HAVING , GROUP BY y ORDER BY , pero no en las cláusulas WHERE .

Tanto HAVING como WHERE se usan para filtrar consultas, pero se comportan ligeramente diferente: HAVING se aplica después de GROUP BY y WHERE antes.

Como regla general de SQL, no debe usar alias de columna ( pivot_foo en ese caso) para agrupar, filtrar o algo por el estilo, ya que puede no funcionar con otras bases de datos SQL.

Aunque no se recomienda, es posible usar:

return User::find(1)->works()->having(''pivot_active'',''='',''1'')->get();

Estoy usando una tabla dinámica en el proyecto con el que estoy trabajando para obtener trabajos de los usuarios.

Por ejemplo: User::find(1)->works me da los trabajos de usuario con ID de 1.

El caso es que quiero filtrar estos resultados con datos de Pivot adicionales.

Algo como:

User::find(1)->works->pivot->where(''active'',1)->get();

En el que el activo es la columna que he configurado en mi tabla dinámica de user_works.

Esta es mi parte relacionada de mi modelo User.php:

<?php class User extends Cartalyst/Sentry/Users/Eloquent/User { public function works() { return $this->belongsToMany(''Work'',''user_works'')->withPivot(''active'')->withTimestamps(); } }

Esta es mi parte relacionada de mi modelo Work.php:

<?php class Work extends Eloquent { public function users() { return $this->belongsToMany(''User'',''user_works'')->withPivot(''active'')->withTimestamps(); } }

Este es mi esquema de tabla dinámica:

<?php use Illuminate/Database/Migrations/Migration; use Illuminate/Database/Schema/Blueprint; class CreateUserWorksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create(''user_works'', function(Blueprint $table) { $table->increments(''id''); $table->integer(''user_id'')->unsigned()->default(0); $table->integer(''work_id'')->unsigned()->default(0); $table->enum(''active'',array(''0'',''1''))->default(1); $table->foreign(''user_id'')->references(''id'')->on(''users'')->onDelete(''cascade''); $table->foreign(''work_id'')->references(''id'')->on(''works'')->onDelete(''cascade''); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop(''user_works''); } }

¿Hay alguna manera de obtener los datos sin crear un nuevo modelo para la tabla dinámica?

Gracias por adelantado,

Editar: puedo filtrar de esta manera:

return User::find(1)->works()->where(''user_works.active'',''='',''1'')->get();

Tuve que escribir el nombre de la tabla en bruto. ¿Pero hay una mejor manera de obtener esto sin usarlo?


Intento configurar todas las relaciones en ambas direcciones, ya que esto permite el uso de propiedades dinámicas, por ejemplo, $ user-> works ().

class Collection extends Eloquent { public function contents() { return $this->belongsToMany(''Content'', ''collection_content'', ''collection_id'', ''content_id'')->withPivot(''collection_id'', ''group_id'', ''field_identifier''); } } class Content extends Eloquent { public function collections() { return $this->belongsToMany(''Collection'', ''collection_content'', ''collection_id'', ''content_id'')->withPivot(''collection_id'', ''group_id'', ''field_identifier''); } } class CollectionContent extends Eloquent { public function content() { return $this->belongsTo(''Content''); } public function collection() { return $this->belongsTo(''Collection''); } }

Luego consulta: $ works = User :: find (1) -> works () -> where (''active'', 1) -> get ();

La documentación de Eloquent es horrible cuando se trata del uso de tablas dinámicas. Este es un gran tutorial: http://www.developed.be/2013/08/30/laravel-4-pivot-table-example-attach-and-detach/


Laravel 4.1 trae wherePivot nativos wherePivot y orWherePivot , que son directamente una solución a mi problema.