inner conectar con php mysql laravel eloquent fluent

php - conectar - laravel eloquent limit



Laravel Fluent vs Eloquent (1)

Primera pregunta :

¿Por qué Fluent devuelve una array ?

return DB::connection(''mysql'')->table(''cards'') ->where(''setCode'', ''='', $setcode) ->get();

Mientras Eloquent devuelve un object :

return Card::where(''setCode'', ''='', $setcode) ->get();

Los datos en sí se ven exactamente iguales en lo que puedo decir.

Segunda pregunta :

El siguiente código está en Fluent :

DB::table(''auth.users_deck_overview as deckOverviewDB'') ->leftJoin(''auth.users_deck_cards as deckCardsDB'', ''deckOverviewDB.deck_uid'', ''='', ''deckCardsDB.deck_uid'') ->leftJoin(''mtg_cards.cards as cardsDB'', ''deckCardsDB.card_uid'', ''='', ''cardsDB.uid'') ->select(''cardsDB.name'', ''deckCardsDB.card_quantity'', ''cardsDB.manaCost'', ''cardsDB.colors'', ''cardsDB.cmc'') ->where(''deckOverviewDB.username'', ''='', $user->username) ->where(''deckOverviewDB.deck_uid'', ''='', $deckUid) ->where(''deckCardsDB.board'', ''='', 0) ->where(''cardsDB.cmc'', ''!='', '''') ->get();

¿Cómo cambiaría lo anterior a Eloquent suponiendo que users_deck_overview , users_deck_cards , cards Modelos son DeckOverview , DeckCard y Card respectivamente?


First Question Fluent es un generador de consultas y Eloquent es un ORM. Eloquent se basa en Fluent.

Segunda pregunta La respuesta corta es que no lo harías. Un ORM no es realmente adecuado para hacer las cosas de esta manera. Esta es una situación de clavija cuadrada / agujero redondo.

Laravel también aplica la convención sobre la configuración. En su caso, esto significa que probablemente sea mejor que trate de reestructurar su base de datos para que coincida con la convención de Eloquent en lugar de configurar Eloquent para que coincida con su esquema de base de datos.

Una vista simplificada de la estructura ORM puede verse así.

DeckOverview hasMany DeckCard DeckCard belongsToMany Card belongsTo DeckOverview Card belongsToMany DeckCard

La mejor forma de obtener todos esos datos es mediante la carga ansiosa.

$deckOverview = DeckOverview::with(''deckCards.cards'')->first();

Aquí es donde el ORM realmente no se alinea con su enfoque. Un ORM está construido para tener un objeto que representa un registro en la tabla. Aquí tenemos una DeckOverview que tiene un montón de DeckCards. Serían accedidos así.

$deckCard = $deckOverview->deckCards->first();

O tal vez esto ...

foreach ($deckOverview->deckCards as $deckCard) { foreach ($deckCard->cards as $card) { // do something with each card in the deck } }

Puede limitar los resultados obtenidos mediante la carga ansiosa. Esto solo cargaría DeckCards donde el tablero era 0.

$deckOverviews = DeckOverview::with(array(''deckCards'' => function ($query) { // Equals comparison operator can be assumed $query->where(''board'', 0); })->get()

Puede usar tiene para aplicar restricciones basadas en relaciones. Esto solo cargaría DeckOverviews que tenía DeckCards donde el tablero era 0.

$deckOverviews = DeckOverview::has(array(''deckCards'' => function ($query) { $query->where(''board'', 0); });

Hay mucho que asimilar aquí. Se requerirá un cambio importante en la forma de planificar y construir su aplicación.