Làm thế nào để chọn các cột cụ thể trong hùng biện laravel


137

giả sử tôi có 7 cột trong bảng và tôi chỉ muốn chọn hai cột trong số đó, đại loại như thế này

SELECT `name`,`surname` FROM `table` WHERE `id` = '1';

Trong mô hình hùng biện laravel có thể trông như thế này

Table::where('id', 1)->get();

nhưng tôi đoán biểu thức này sẽ chọn TẤT CẢ các cột trong đó id bằng 1 và tôi chỉ muốn hai cột (tên, họ). Làm thế nào để chỉ chọn hai cột?


Cảm ơn đã đặt câu hỏi. Thật điên rồ khi tôi luôn thực hiện điều này một cách chính xác trong các truy vấn SQL 'cổ điển', nhưng phải sử dụng Eloquent, tôi thấy thật khó hiểu khi tôi thấy nó hoạt động và không biết bao nhiêu bộ nhớ mà các truy vấn của tôi đang sử dụng vì tôi đã chọn tất cả mọi thứ.
Jonny Perl

Câu trả lời:


223

Bạn có thể làm như thế này:

Table::select('name','surname')->where('id', 1)->get();

1
giả sử tôi muốn chọn mọi lĩnh vực mong đợi một người làm thế nào tôi có thể làm điều đó
Hoàng tử Arora

1
Trước hết, khi bạn có câu hỏi, hãy hỏi một câu. Và đối với trường hợp của bạn - chỉ cần đề cập đến tất cả các cột thay vì cột bạn không muốn đưa vào. Nó là dễ dàng.
Marcin Nabiałek

2
không có phương pháp nào khác để làm điều đó mà không đề cập đến tất cả các cột
Hoàng tử Arora

1
Điều này làm việc cho một trường hợp cơ bản với một bảng duy nhất. Tuy nhiên, nếu bạn đang sử dụng một mối quan hệ trên bảng trụ, thì điều này C ALNG sẽ tự động chọn các cột trụ.
Benubird

1
@OPV Nó chỉ chạy SELECT name, surname FROM Table where id = 1truy vấn SQL
Marcin Nabiałek

67
Table::where('id', 1)->get(['name','surname']);

Tôi muốn điều tương tự nhưng sử dụng phương pháp khác nhau. Tôi muốn chọn phương thức bằng cách tạo thể hiện của mô hình và sau đó chọn cột. tức là $ model = new MyModel (); $ model-> select (['col1', 'col2']); Nhưng điều này không hoạt động
Dhirender 20/03/18

49

Bằng cách sử dụng phương thức all (), chúng ta có thể chọn các cột cụ thể từ bảng như dưới đây.

ModelName::all('column1', 'column2', 'column3');

Lưu ý : Laravel 5.4


Tôi muốn điều tương tự nhưng sử dụng phương pháp khác nhau. Tôi muốn chọn phương thức bằng cách tạo thể hiện của mô hình và sau đó chọn cột. tức là $ model = new MyModel (); $ model-> select (['col1', 'col2']); Nhưng điều này không hoạt động.
Dhirender 20/03/18

37

Bạn cũng có thể sử dụng find()như thế này:

ModelName::find($id, ['name', 'surname']);

Các $idbiến có thể là một mảng trong trường hợp bạn cần phải lấy nhiều trường hợp của mô hình.



17

Trước tiên, bạn cần tạo một Mô hình, đại diện cho Bảng đó và sau đó sử dụng cách Eloquent bên dưới để tìm nạp dữ liệu chỉ có 2 trường.

Model::where('id', 1)
         ->pluck('name', 'surname')
         ->all();

Đây là câu trả lời tốt nhất vì nó cũng hoạt động với các bảng trụ trong nhiều mối quan hệ.
Luciano Fantuzzi

8

Bạn có thể sử dụng get () cũng như tất cả ()

ModelName::where('a', 1)->get(['column1','column2']);

4

Ngoài ra bạn có thể sử dụng nhổ lông.

Model::where('id',1)->pluck('column1', 'column2');

6
Lưu ý rằng pluck()kém hiệu quả hơn các phương thức khác được thảo luận vì nó không sửa đổi SELECT ...truy vấn, nhưng thay vào đó, nó hoạt động trên tập kết quả đã trả về.
Ben Johnson

4

Nhận giá trị của một cột:

Table_Name::find($id)->column_name;

Thậm chí bạn có thể sử dụng phương thức này với mệnh đề where:

Table_Name::where('id',$id)->first()->column_name;

trong trình xây dựng truy vấn:

DB::table('table_names')->find($id)->column_name;

với nơi cluase:

DB::table('table_names')->where('id',$id)->first()->column_name;

hoặc là

DB::table('table_names')->where('id',$id)->first('column_name');

kết quả phương thức cuối cùng là mảng


3

Bạn có thể sử dụng Table::select ('name', 'surname')->where ('id', 1)->get ().

Hãy nhớ rằng khi chỉ chọn một số trường nhất định, bạn sẽ phải thực hiện một truy vấn khác nếu cuối cùng bạn truy cập vào các trường khác đó trong yêu cầu (điều đó có thể rõ ràng, chỉ muốn bao gồm cảnh báo đó). Bao gồm trường id thường là một ý tưởng tốt để laravel biết cách viết lại bất kỳ cập nhật nào bạn thực hiện cho cá thể mô hình.


3

Từ laravel 5.3 chỉ sử dụng get()phương thức, bạn có thể nhận được các cột cụ thể của bảng:

YouModelName::get(['id', 'name']);

Hoặc từ laravel 5.4, bạn cũng có thể sử dụng all()phương pháp để lấy các lĩnh vực bạn chọn:

YourModelName::all('id', 'name');

với cả hai phương pháp trên get()hoặc all()bạn cũng có thể sử dụng where()nhưng cú pháp khác nhau cho cả hai:

Mô hình :: tất cả ()

YourModelName::all('id', 'name')->where('id',1);

Mô hình :: get ()

YourModelName::where('id',1)->get(['id', 'name']);

3

Để có được kết quả của cột cụ thể từ bảng, chúng ta phải chỉ định tên cột.

Sử dụng mã sau: -

   $result = DB::Table('table_name')->select('column1','column2')->where('id',1)->get();  

ví dụ -

$result = DB::Table('Student')->select('subject','class')->where('id',1)->get();  

Vui lòng thêm một số lời giải thích cho câu trả lời của bạn để những người khác có thể học hỏi từ nó
Nico Haase

2

Mặc dù cách tiếp cận phổ biến nhất là sử dụng Model::select, nó có thể gây ra việc hiển thị tất cả các thuộc tính được xác định bằng các phương thức truy cập trong các lớp mô hình. Vì vậy, nếu bạn xác định thuộc tính trong mô hình của bạn:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the user's first name.
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

Và sau đó sử dụng: TableName::select('username')->where('id', 1)->get();

Nó sẽ xuất bộ sưu tập với cả hai first_nameusername, thay vì chỉ tên người dùng.

Sử dụng tốt hơn pluck(), độc tấu hoặc tùy chọn kết hợp với select- nếu bạn muốn các cột cụ thể.

TableName::select('username')->where('id', 1)->pluck('username');

hoặc là

TableName::where('id', 1)->pluck('username'); // sẽ trả về bộ sưu tập chỉ bao gồm các usernamegiá trị

Ngoài ra, tùy chọn, sử dụng ->toArray()để chuyển đổi đối tượng bộ sưu tập thành mảng.


1

->get()rất giống ->all()(và ->first()vv ..) có thể lấy các trường bạn muốn mang về làm tham số;

->get/all(['column1','column2'])

Sẽ mang lại bộ sưu tập nhưng chỉ với column1column2


1

bạn cũng có thể sử dụng findOrFail()phương pháp ở đây rất tốt để sử dụng

nếu không bắt được ngoại lệ, phản hồi HTTP 404 sẽ tự động được gửi lại cho người dùng. Không cần thiết phải viết kiểm tra rõ ràng để trả về phản hồi 404 khi sử dụng các phương thức này không gây ra lỗi 500 ..

ModelName::findOrFail($id, ['firstName', 'lastName']);

1

Nếu bạn muốn lấy một hàng đơn và từ cột đơn hàng đó, một mã dòng để lấy giá trị của cột cụ thể là sử dụng find()phương thức cùng với việc chỉ định cột mà bạn muốn truy xuất nó.

Đây là mã mẫu:

ModelName::find($id_of_the_record, ['column_name'])->toArray()['column_name'];

0

Bạn có thể sử dụng truy vấn dưới đây:

Table('table')->select('name','surname')->where('id',1)->get();

1
Vui lòng thêm một số lời giải thích cho câu trả lời của bạn để những người khác có thể học hỏi từ nó
Nico Haase

0

sử dụng Ứng dụng \ Bảng; ... Bảng :: trong đó ('id', 1) -> get ('name', 'họ');

nếu không có

Bảng :: tất cả ('tên', 'họ');

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.