update tablas relacionadas obtener ejemplo datos create consultas consultar consulta laravel laravel-4 eloquent relationship

ejemplo - obtener datos de tablas relacionadas laravel



Consultando Relaciones Laravel Eloquent ORM (2)

Tengo un problema para entender las Relaciones, vayamos al grano

Tengo 3 tablas, con sus modelos adecuados

receipt - id - date items_sold - id - receipt_id - item_id items - id - name

El problema que tengo es que el recibo "tiene muchos" elementos a través de items_sold, pero no puedo usar "hasManyThrough" porque uso elocuente el "id" incorrecto de "items_sold", incluso si puse manualmente las claves

class Receipt extends Eloquent { public function items() { return $this->hasManyThrough(''Items'', ''ItemsSold'', ''receipt_id'', ''id''); } }

No hay forma de hacerlo en este camino, pero puedo encontrar un método de relación con elocuente que me puede ayudar con este caso


Como declaró lukasgeiter, una relación belongsToMany() añadida a sus modelos le permitiría acceder a los datos relacionados.

Algo más a tener en cuenta, si cambia el nombre de su tabla de item_reciept a item_reciept , puede definir la relación de muchos a muchos en sus modelos sin tener que especificar específicamente la tabla de unión. Cuando Laravel ve un método belongsToMany sin un nombre de tabla de combinación especificado, busca el nombre de los dos modelos implicados en el caso de serpiente y el orden alfabético con minúsculas.

Sus métodos modelo serían:

class Receipt extends Eloquent{ public function items(){ return $this->belongsToMany(''Item''); } } class Item extends Eloquent{ public function reciepts(){ return $this->belongsToMany(''Reciept''); } }

Puedo entender si no quieres cambiar el nombre de tu tabla items_sold porque su nombre específico denota su uso pasado simplemente como una tabla de unión.

Otra cosa a tener en cuenta acerca de agregar estas relaciones al modelo es que le permite realizar una carga ansiosa con sus solicitudes, lo que podría ser útil en sus situaciones.

Supongamos que desea obtener todos los artículos para un recibo específico por su id, todo de una vez. Puede usar la siguiente solicitud para obtener todo junto:

$receiptAndItems = Receipt::with(''items'')->find($recieptId);

Esto devolvería los detalles en su registro de Recibo particular Y los items clave con todos los registros de Artículos relacionados para ese recibo dado:

// Your `receipt` record // this is the output when you add `->toArray()` at the end to make it a bit easier to read array (size=7) ''id'' => int 2 ''name'' => string ''Foo'' (length=12) ''created_at'' => string ''2014-11-22 16:30:02'' (length=19) ''updated_at'' => string ''2014-11-22 16:30:02'' (length=19) ''items'' => array (size=3) 0 => array (size=7) ''id'' => int 1 ''name'' => string ''Bar'' (length=13) ''created_at'' => string ''2014-11-22 16:30:02'' (length=19) ''updated_at'' => string ''2014-11-22 16:30:02'' (length=19) ''pivot'' => array (size=2) ... 1 => array (size=7) ''id'' => int 2 ''name'' => string ''Baz'' (length=20) ''created_at'' => string ''2014-11-22 16:30:02'' (length=19) ''updated_at'' => string ''2014-11-22 16:30:02'' (length=19) ''pivot'' => array (size=2) ... 2 => array (size=7) ''id'' => int 3 ''name'' => string ''FooBarBaz'' (length=18) ''created_at'' => string ''2014-11-22 16:30:02'' (length=19) ''updated_at'' => string ''2014-11-22 16:30:02'' (length=19) ''pivot'' => array (size=2)


Estoy bastante seguro de que lo que realmente necesitas es una relación de muchos a muchos que se encuentran aquí

public function items(){ return $this->belongsToMany(''Items'', ''items_sold''); }

¿Eres modelo realmente llamado "Artículos"? Si es realmente "Artículo", cambie al primer parámetro en el código anterior en consecuencia