qwerty Posted December 29, 2014 Report Share Posted December 29, 2014 Cerams ir kāds Eloquent zinātājs. Tātad, ja ir kāds vienums datubāzē (piemēram, raksts Article) kas ir daļa no on-to-many relationshipa, tad varam lietot ->with() metodi, piemēram: Articles ::select('article_id', 'article_text') //Seit ir probleema ->with([ 'user' => function($q){ $q->select('user_id', 'user_name'); // Sis straadaa kaa paredzeets, no usera nak tikai id, name } ]) ->get(); Problēma ir tāda, ka ->select() priekš user strādā kā paredzēts, bet ārējais select, ar ko es gribu ierobežot, kādus datus ievākt no article, rada problēmu - atgrieztajiem objektiem ir noņemts nost 'user', jo tas it kā nav ārējā select sarakstā. Bet, ja es pievienoju tur to 'user', tad izmet erroru, ka datubāzē nav kolonna 'user' - Eloquent nesaprot, ka es ar to domāju nevis kolonnu, bet with() relationshipu. Vai kāds zina, kā varu norādīt interesējošās kolonnas gan Article, gan User ? Quote Link to comment Share on other sites More sharing options...
briedis Posted December 29, 2014 Report Share Posted December 29, 2014 Man liekas, ka ar šo biju saskāries, bet neatceros, kā atrisināju :) Varbūt šeit ir atbilde: http://stackoverflow.com/questions/19852927/get-specific-columns-using-with-function-in-laravel-eloquent Noteikti, ka var atrast kko šeit: https://www.google.lv/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=eloquent+specify+column+with Quote Link to comment Share on other sites More sharing options...
qwerty Posted December 30, 2014 Author Report Share Posted December 30, 2014 To stackoverflowa jautājumu jau izskatīju, tur nekas par to nav. Lielāko daļu googles linkus arī. Tos iegūtos rezultātus ir paredzēts sūtīt uz klienta pusi kā daļu no JSON atbildes. Tāpēc vienīgais, ko varu iedomāties - Article modelī definēt $visible laukus priekš pārvēršanas uz JSON. Tad to, ko man atgriež Eloquent, pārvērst uz JSON un vēlreiz atpakaļ uz PHP objektu. (Man neder uzreiz iegūtais JSON, jo tas nav viss JSON, kas jāsūta..) Quote Link to comment Share on other sites More sharing options...
briedis Posted December 30, 2014 Report Share Posted December 30, 2014 Nu ja ļoti sāpīgi izdomāt, Tu vienmēr vari atlasīt ierakstus, izķeksēt ārā masīvu ar ID, un atlasīt atsevišķi ar vienu selectu whereIn('id', $ids); Man pat parasti patīk tā darīt, jo tad viss ir skaidri saprotams, nenotiek nekāda maģija ar ORMa join'iem utt. Quote Link to comment Share on other sites More sharing options...
Kavacky Posted December 30, 2014 Report Share Posted December 30, 2014 Un kas notiek, ja tu neierobežo atlasāmos datus, bet atlasi visus? Quote Link to comment Share on other sites More sharing options...
Kemito Posted December 31, 2014 Report Share Posted December 31, 2014 (edited) Article tabulā Tev glabājas tādi lauki "article_text" "article_id" vai "id" & "text" ? Aizvāc ārējo selektu. ->get(['id', 'text']); Tāvā gadījumā neredzu baigo sāpi mest pāri un nelietot select. Tavā vietā es pat neizmantot eager lodingu, uz 1TM (jautājums vai tiešām tur ir jābūt 1TM, ja reiz article pieder lietotājam ( ar domu, article autors ) tas būtu 1T1) Pietiks ar to, ka Tev būs relācija uz user un atlasīsi articles. Tālāk kontekstā varēsi izsaukt kaut ko šādu foreach ($articles as $article) { echo $article->user->name; } Ar ko arī pilnībā pietiek. Ja aplikācijas būvē uz FW, es šaubos, ka šis būtu tas stāsts kurā vajadzētu plēst un sarežģīt galvu, lai atlasītu konkrētos rowus. Performanci var iegūt arī citādākā, vai arī šis ir moments kurā jau vajag tāda veida optimizāciju? Note: Vai tiešām modelis Tev saucas "Articles" , modeļu nosaukumus vēlams saukt singular, jo tas atbild par "vienu" konkrētu ierakstu tabulā. Edited December 31, 2014 by Kemito Quote Link to comment Share on other sites More sharing options...
kristerskz Posted December 31, 2014 Report Share Posted December 31, 2014 Es tikko izmēģināju tādu kvēriju - patiesībā tas ārējais selects strādā tieši tā, kā tu vēlies. Tava problēma, ka jūzeris ir izņemts no gala rezultātiem, rodas tad, ja tu ārējā selektā neesi selectojis user_id jeb to lauku, kas atbilst par relāciju. Ja tā lauka nav, tad eloquent uzskata, ka šis Article nevienam User nepieder. Articles ::select('article_id', 'article_text', 'user_id') //Tagad te vairs problema nav ->with([ 'user' => function($q){ $q->select('user_id', 'user_name'); } ]) ->get(); Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.