Have database queries inside eloquent ORM











up vote
0
down vote

favorite












Let me show you my eloquent ORM class:



<?php

namespace AppHttpModelsTransport_Type;

use IlluminateDatabaseEloquentModel;
use AppHttpModelsTransport_TypeTransportType;

class TransportType extends Model{

public $timestamps = false;

public function foo($language_id){
$transport_types = TransportType::join('translations', 'transport_types.name', '=', 'translations.id')
->join('translation_entries', 'translations.id', '=', 'translation_entries.translation_id')
->where('translation_entries.language_id', '=', $language_id)
->orderBy('parent_id')
->get(['transport_types.id', 'transport_types.parent_id', 'translation_entries.value']);

return $transport_types;
}
}


As you see I have foo function which I can call from many different controllers. so here is my question: Is it a good practice? or should I move that query logic to controller?










share|improve this question
























  • I'm not sure if this is what you're looking for, but you might use a query scope instead of a regular function. These can have parameters passed as well. laravel.com/docs/master/eloquent#query-scopes
    – GoogleMac
    Nov 21 at 19:28

















up vote
0
down vote

favorite












Let me show you my eloquent ORM class:



<?php

namespace AppHttpModelsTransport_Type;

use IlluminateDatabaseEloquentModel;
use AppHttpModelsTransport_TypeTransportType;

class TransportType extends Model{

public $timestamps = false;

public function foo($language_id){
$transport_types = TransportType::join('translations', 'transport_types.name', '=', 'translations.id')
->join('translation_entries', 'translations.id', '=', 'translation_entries.translation_id')
->where('translation_entries.language_id', '=', $language_id)
->orderBy('parent_id')
->get(['transport_types.id', 'transport_types.parent_id', 'translation_entries.value']);

return $transport_types;
}
}


As you see I have foo function which I can call from many different controllers. so here is my question: Is it a good practice? or should I move that query logic to controller?










share|improve this question
























  • I'm not sure if this is what you're looking for, but you might use a query scope instead of a regular function. These can have parameters passed as well. laravel.com/docs/master/eloquent#query-scopes
    – GoogleMac
    Nov 21 at 19:28















up vote
0
down vote

favorite









up vote
0
down vote

favorite











Let me show you my eloquent ORM class:



<?php

namespace AppHttpModelsTransport_Type;

use IlluminateDatabaseEloquentModel;
use AppHttpModelsTransport_TypeTransportType;

class TransportType extends Model{

public $timestamps = false;

public function foo($language_id){
$transport_types = TransportType::join('translations', 'transport_types.name', '=', 'translations.id')
->join('translation_entries', 'translations.id', '=', 'translation_entries.translation_id')
->where('translation_entries.language_id', '=', $language_id)
->orderBy('parent_id')
->get(['transport_types.id', 'transport_types.parent_id', 'translation_entries.value']);

return $transport_types;
}
}


As you see I have foo function which I can call from many different controllers. so here is my question: Is it a good practice? or should I move that query logic to controller?










share|improve this question















Let me show you my eloquent ORM class:



<?php

namespace AppHttpModelsTransport_Type;

use IlluminateDatabaseEloquentModel;
use AppHttpModelsTransport_TypeTransportType;

class TransportType extends Model{

public $timestamps = false;

public function foo($language_id){
$transport_types = TransportType::join('translations', 'transport_types.name', '=', 'translations.id')
->join('translation_entries', 'translations.id', '=', 'translation_entries.translation_id')
->where('translation_entries.language_id', '=', $language_id)
->orderBy('parent_id')
->get(['transport_types.id', 'transport_types.parent_id', 'translation_entries.value']);

return $transport_types;
}
}


As you see I have foo function which I can call from many different controllers. so here is my question: Is it a good practice? or should I move that query logic to controller?







php laravel eloquent






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 at 14:15









tereško

52.1k1976135




52.1k1976135










asked Nov 21 at 19:26









Nika Khurashvili

62910




62910












  • I'm not sure if this is what you're looking for, but you might use a query scope instead of a regular function. These can have parameters passed as well. laravel.com/docs/master/eloquent#query-scopes
    – GoogleMac
    Nov 21 at 19:28




















  • I'm not sure if this is what you're looking for, but you might use a query scope instead of a regular function. These can have parameters passed as well. laravel.com/docs/master/eloquent#query-scopes
    – GoogleMac
    Nov 21 at 19:28


















I'm not sure if this is what you're looking for, but you might use a query scope instead of a regular function. These can have parameters passed as well. laravel.com/docs/master/eloquent#query-scopes
– GoogleMac
Nov 21 at 19:28






I'm not sure if this is what you're looking for, but you might use a query scope instead of a regular function. These can have parameters passed as well. laravel.com/docs/master/eloquent#query-scopes
– GoogleMac
Nov 21 at 19:28














1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










I prefer to keep my eloquent models and controllers as empty as possible, because of that I prefer to have repositories where I handle all my data access. See https://medium.com/employbl/use-the-repository-design-pattern-in-a-laravel-application-13f0b46a3dce for examples how to do this in Laravel.



Edit: I'm not sure of your approach is a bad of good practice. Just wanted to share my opinion maybe it helps :)!






share|improve this answer





















  • so I can have TransportTypeRepository and that repository will have this foo function ?
    – Nika Khurashvili
    Nov 21 at 19:37










  • Yes, keep in mind that every repository only should have one source(model).
    – Romano Schoonheim
    Nov 21 at 19:42












  • so TransportTypeRepository->foo() and TransportTypeRepository->all() would be the way to go and not TransportType->all() and TransportType->foo();
    – Nika Khurashvili
    Nov 21 at 19:43










  • Yes! I'm not aware of the full context, but I usually do is this way because my code become more DRY and the testability improves.
    – Romano Schoonheim
    Nov 21 at 19:49











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53419246%2fhave-database-queries-inside-eloquent-orm%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote



accepted










I prefer to keep my eloquent models and controllers as empty as possible, because of that I prefer to have repositories where I handle all my data access. See https://medium.com/employbl/use-the-repository-design-pattern-in-a-laravel-application-13f0b46a3dce for examples how to do this in Laravel.



Edit: I'm not sure of your approach is a bad of good practice. Just wanted to share my opinion maybe it helps :)!






share|improve this answer





















  • so I can have TransportTypeRepository and that repository will have this foo function ?
    – Nika Khurashvili
    Nov 21 at 19:37










  • Yes, keep in mind that every repository only should have one source(model).
    – Romano Schoonheim
    Nov 21 at 19:42












  • so TransportTypeRepository->foo() and TransportTypeRepository->all() would be the way to go and not TransportType->all() and TransportType->foo();
    – Nika Khurashvili
    Nov 21 at 19:43










  • Yes! I'm not aware of the full context, but I usually do is this way because my code become more DRY and the testability improves.
    – Romano Schoonheim
    Nov 21 at 19:49















up vote
1
down vote



accepted










I prefer to keep my eloquent models and controllers as empty as possible, because of that I prefer to have repositories where I handle all my data access. See https://medium.com/employbl/use-the-repository-design-pattern-in-a-laravel-application-13f0b46a3dce for examples how to do this in Laravel.



Edit: I'm not sure of your approach is a bad of good practice. Just wanted to share my opinion maybe it helps :)!






share|improve this answer





















  • so I can have TransportTypeRepository and that repository will have this foo function ?
    – Nika Khurashvili
    Nov 21 at 19:37










  • Yes, keep in mind that every repository only should have one source(model).
    – Romano Schoonheim
    Nov 21 at 19:42












  • so TransportTypeRepository->foo() and TransportTypeRepository->all() would be the way to go and not TransportType->all() and TransportType->foo();
    – Nika Khurashvili
    Nov 21 at 19:43










  • Yes! I'm not aware of the full context, but I usually do is this way because my code become more DRY and the testability improves.
    – Romano Schoonheim
    Nov 21 at 19:49













up vote
1
down vote



accepted







up vote
1
down vote



accepted






I prefer to keep my eloquent models and controllers as empty as possible, because of that I prefer to have repositories where I handle all my data access. See https://medium.com/employbl/use-the-repository-design-pattern-in-a-laravel-application-13f0b46a3dce for examples how to do this in Laravel.



Edit: I'm not sure of your approach is a bad of good practice. Just wanted to share my opinion maybe it helps :)!






share|improve this answer












I prefer to keep my eloquent models and controllers as empty as possible, because of that I prefer to have repositories where I handle all my data access. See https://medium.com/employbl/use-the-repository-design-pattern-in-a-laravel-application-13f0b46a3dce for examples how to do this in Laravel.



Edit: I'm not sure of your approach is a bad of good practice. Just wanted to share my opinion maybe it helps :)!







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 21 at 19:33









Romano Schoonheim

518




518












  • so I can have TransportTypeRepository and that repository will have this foo function ?
    – Nika Khurashvili
    Nov 21 at 19:37










  • Yes, keep in mind that every repository only should have one source(model).
    – Romano Schoonheim
    Nov 21 at 19:42












  • so TransportTypeRepository->foo() and TransportTypeRepository->all() would be the way to go and not TransportType->all() and TransportType->foo();
    – Nika Khurashvili
    Nov 21 at 19:43










  • Yes! I'm not aware of the full context, but I usually do is this way because my code become more DRY and the testability improves.
    – Romano Schoonheim
    Nov 21 at 19:49


















  • so I can have TransportTypeRepository and that repository will have this foo function ?
    – Nika Khurashvili
    Nov 21 at 19:37










  • Yes, keep in mind that every repository only should have one source(model).
    – Romano Schoonheim
    Nov 21 at 19:42












  • so TransportTypeRepository->foo() and TransportTypeRepository->all() would be the way to go and not TransportType->all() and TransportType->foo();
    – Nika Khurashvili
    Nov 21 at 19:43










  • Yes! I'm not aware of the full context, but I usually do is this way because my code become more DRY and the testability improves.
    – Romano Schoonheim
    Nov 21 at 19:49
















so I can have TransportTypeRepository and that repository will have this foo function ?
– Nika Khurashvili
Nov 21 at 19:37




so I can have TransportTypeRepository and that repository will have this foo function ?
– Nika Khurashvili
Nov 21 at 19:37












Yes, keep in mind that every repository only should have one source(model).
– Romano Schoonheim
Nov 21 at 19:42






Yes, keep in mind that every repository only should have one source(model).
– Romano Schoonheim
Nov 21 at 19:42














so TransportTypeRepository->foo() and TransportTypeRepository->all() would be the way to go and not TransportType->all() and TransportType->foo();
– Nika Khurashvili
Nov 21 at 19:43




so TransportTypeRepository->foo() and TransportTypeRepository->all() would be the way to go and not TransportType->all() and TransportType->foo();
– Nika Khurashvili
Nov 21 at 19:43












Yes! I'm not aware of the full context, but I usually do is this way because my code become more DRY and the testability improves.
– Romano Schoonheim
Nov 21 at 19:49




Yes! I'm not aware of the full context, but I usually do is this way because my code become more DRY and the testability improves.
– Romano Schoonheim
Nov 21 at 19:49


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53419246%2fhave-database-queries-inside-eloquent-orm%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

Calculate evaluation metrics using cross_val_predict sklearn

Insert data from modal to MySQL (multiple modal on website)