Разница между моделью и методом построения запросов при использовании get и first на laravel? - PullRequest
0 голосов
/ 27 августа 2018

если я просто хочу получить имя только одного столбца

- использовать модель --------

$model_use_get  =Model::select('name')->where('id','=',10)->get();

$want=$model_use_get[0]['name'];

$model_use_first=Model::select('name')->where('id','=',10)->first();

$want=$model_use_first['name'];

--- использовать построитель запросов -----

$query_use_get  =DB::table('a1)->select('name')->where('id','=',10)->get();

$want=$query_use_get[0]->name;

$query_use_first=DB::table('a1)->select('name')->where('id','=',10)->first();

$want=$query_use_first->name;

какая разница? Разве модель или метод запроса не создают коллекцию? или объект? (массив?) я запутался !!! Есть ли какой-то прямой метод, чтобы просто выбрать один, не нужно обрабатывать снова? как показано ниже (я подтверждаю, что результат только один, потому что я использую где id = xxx)

$want=model::select('name)->.... 
$want=DB::table('a1')->select('name').....

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Чтобы ответить на вопрос, комбинация Model, DB::table(), ->get() и ->first() все возвращает разные вещи.

1-й экземпляр, Model и ->get():

$collection = Model::get(); 
// Returns a `Collection` of `Model` records, constrained to your additional query logic.

2-й, Model и ->first():

$model = Model::first(); 
// Returns a single `Model`, or `null`, based on your query logic.

3-й, DB::table() и ->get():

$collection = DB::table("table")->get(); 
// Returns a `Collection` of `stdClass` objects, based on your query logic.

4-й, DB::table() и ->first():

$record = DB::table("table")->first(); 
// Returns a single `stdClass`, or `null`, based on your query logic.

Надеюсь, это все прояснит. Есть дополнительные замыкания, такие как find(), findOrFail(), paginate() и т. Д., Которые все возвращают похожие вещи, поэтому поиграйте с ними и посмотрите, что лучше всего подходит для ваших нужд.

0 голосов
/ 27 августа 2018

Разница довольно проста:

  • first() получает одну запись из базы данных
  • get() получает коллекцию предметов (аналогично массиву)

Таким образом, для first() вы можете получить свойство модели, используя $model->property, но для get у вас есть несколько элементов, поэтому вы можете получить свойства, используя цикл:

foreach ($models as $model) {
   $model->property;
}

Когда вы запускаете get() и позже first, например, вы запускаете 2 запроса, но вы можете также вызывать first для элементов, которые вы уже получили из базы данных:

$models = Model::select('name')->where('id','=',10)->get();

foreach ($models as $model) {
   echo $model->name;
}

$firstModel = $models->first();

$want = $firstModel->name;
...