2017-06-28 17 views
6

Trong khi lấy từ cơ sở dữ liệu, tôi nhận được id làm chuỗi.Pluck id (integer) được tạo thành chuỗi Laravel

$alphabets = new Alphabet(); 
return $alphabets->pluck('name', 'id'); 

Output

{ 
    "1": "Apple", 
    "2": "Ball", 
    "3": "Cat" 
} 

Dự kiến ​​

{ 
    1: "Apple", 
    2: "Ball", 
    3: "Cat" 
} 

Nhưng, khi tôi đảo ngược IDname,

return $alphabets->pluck('id', 'name'); 

Tôi lấy id làm số nguyên.

{ 
    "Apple": 1, 
    "Ball": 2, 
    "Cat": 3 
} 

Tôi không chắc chắn điều gì đang xảy ra phía sau hiện trường. Nhưng làm thế nào tôi có thể nhận được ID trong số nguyên? Trên thực tế, phiên flash cũ không đặt giá trị vì 1 vs "1" trong Tập hợp biểu mẫu.

{!! Form::select('alphabet', $alphabets, null, ['class' => 'form-control', 'multiple' => true]) !!} 

Trả lời

2

Tôi nghĩ rằng tôi đã tìm thấy câu trả lời ở đây.

https://laracasts.com/discuss/channels/laravel/pluck-id-integer-cast-to-string

Ở đây tôi tìm thấy JSON chỉ cho phép tên chìa khóa để có chuỗi.

Using number as "index" (JSON)

{ 
    "1": "Apple", 
    "2": "Ball", 
    "3": "Cat" 
} 

Thực ra, tôi muốn đạt được nó cho Form Collective. Đó là một lỗi và nó đã được sáp nhập ngay bây giờ.

https://github.com/LaravelCollective/html/pull/368#pullrequestreview-46820423

3

Hãy thử mã này

$alphabets = new Alphabet(); 
return $alphabets->all()->pluck('name', 'id'); 

Alphabet.php

Bạn nên đúc cột của bạn như thế này.

protected $casts = [ 
    'id' => 'integer', 
    'name' => 'string' 
    ]; 
+0

Tôi đã cố gắng điều này không có vẻ làm việc. Nhưng cảm ơn. –

0

Phương pháp thường cung cấp cho bạn dãy giá trị liên kết trong giá trị chuỗi.

Vì vậy, hãy thử sử dụng select tuyên bố như thế này:

$data = Alphabet::select('id','name')->get()->toArray(); 

này sẽ cung cấp cho bạn kết quả như sau:

array:3 [▼ 
    0 => array:2 [▼ 
    "id" => 1 
    "name" => "Apple" 
    ] 
    1 => array:2 [▼ 
    "id" => 2 
    "name" => "Ball" 
    ] 
    2 => array:2 [▼ 
    "id" => 3 
    "name" => "Cat" 
    ] 
] 

Bây giờ, sử dụng vòng lặp đơn giản bạn có thể nhận mảng dự kiến ​​của bạn.

$expected = array(); 

foreach($data as $d){ 
    $expected[$d['name']] = $d['id']; 
} 

dd($expected); 
+1

đó là trường hợp thứ hai của câu hỏi của tôi hoạt động này nhưng nó không phải là kết quả mong đợi. –

1

bạn cũng chuyển đổi chìa khóa vào int

$alphabets = new Alphabet(); 
    $alphaArr =$alphabets->pluck('name', 'id'); 
    foreach($array as $key => $value) { 
     $newArray[(int) $key] = $value; 
    } 
+0

Tôi cũng đã thử điều đó nhưng kết quả là như nhau. Txs –

0

Thêm dòng này khắc phục vấn đề phiên cũ của LaravelCollective/Html.

|| in_array((string) $value, $selected, true)

/** 
* Determine if the value is selected. 
* 
* @param string $value 
* @param string $selected 
* 
* @return null|string 
*/ 
protected function getSelectedValue($value, $selected) 
{ 
    if (is_array($selected)) { 
     return in_array($value, $selected, true) || in_array((string) $value, $selected, true) ? 'selected' : null; 
    } elseif ($selected instanceof Collection) { 
     return $selected->contains($value) ? 'selected' : null; 
    } 
    return ((string) $value == (string) $selected) ? 'selected' : null; 
} 
Các vấn đề liên quan