2015-04-25 16 views
9

Tôi có một truy vấn tôi chạy trong Doctrine; nó bây giờ là thất bại, nhưng theo một cách kỳ lạ. Truy vấn này đã hoạt động được một năm, tôi chỉ bị rối một chút với composer.json một chút bằng cách thêm một vài thư viện mới và thay đổi một số phiên bản. Tôi cũng đã cập nhật hộp Linux của mình (có thể MySQL hoặc MariaDB đã được cập nhật, không chắc chắn). Bất cứ điều gì đã thay đổi (nghi ngờ đó là mã mô hình Doctrine của gói của tôi, trừ khi nó không phải là kosher ở nơi đầu tiên và cập nhật cốt lõi bây giờ cho thấy nó là bị hỏng), truy vấn hiện đang trả về kết quả, với một mảng của chính xác số lượng các khóa, tuy nhiên các giá trị được nhận NULLed bằng cách nào đó. Mảng trông giống hệt như thế này, một bản sao và dán trực tiếp từ var_dump, ví dụ:Dữ liệu kết quả của Symfony2 và Doctrine 2 trả về không chính xác một mảng số trống

var_dump($query->getSql()); 
var_dump($results); 
exit; 

select GoalLabel from opt_goals where scale = 'mathematics' 

array(17) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> NULL [10]=> NULL [11]=> NULL [12]=> NULL [13]=> NULL [14]=> NULL [15]=> NULL [16]=> NULL } 

Nhưng khi tôi chạy truy vấn này cùng trong dòng lệnh MySQL, tôi nhận được kết quả thực tế, đó là cùng một lượng phím, nhưng giá trị đó.

Dưới đây là phần không mặc định của composer.json của tôi yêu cầu phần:

"components/jquery": "~1.11,<2.0", 
    "twbs/bootstrap": "3.3.*", 
    "braincrafted/bootstrap-bundle": "~2.1", 
    "knplabs/knp-menu": "~1.1", 
    "knplabs/knp-menu-bundle": "~1.1", 
    "knplabs/knp-paginator-bundle": "dev-master", 
    "symfony/icu": "1.1.*", 
    "mnot/hinclude": "dev-master", 
    "rhumsaa/array_column": "~1.1", 
    "webfactory/exceptions-bundle": "@stable", 
    "friendsofsymfony/jsrouting-bundle": "~1.5", 
    "hearsay/require-js-bundle": "~1.0", 
    "browserstate/history.js": "dev-master" 

chú ý tới bất kỳ điều chỉnh phiên bản, bởi vì tôi đã làm lộn xộn với điều này. Tuy nhiên tôi không biết tại thời điểm đó Doctrine đã đi sâu vào cuối.

Chỉnh sửa: theo nhận xét mới nhất và now seeing this, đây có phải là những gì đang diễn ra không? Trên thực tế, this URL phù hợp hơn vì tôi không sử dụng doctrine/dbal, tôi đang sử dụng doctrine/orm.

+1

thay vì 'var_dump() 'thử' đổ()' nếu bạn sử dụng 'symfony + 2.6' và cho phép nhìn thấy những gì bạn nhận được. –

+1

Bạn đã kiểm tra 'EXPLAIN' trong hồ sơ web của mình chưa? – sjagr

+0

không nhưng thats một ý tưởng tuyệt vời, tôi không có một hồ sơ, đây là một phản ứng json. làm thế nào tôi sẽ làm điều đó? tôi tìm thấy http://stackoverflow.com/questions/21555697/how-to-display-the-symfony-profiler-for-api-request-made-in-the-browser này và cố gắng giải pháp cho thêm dịch vụ tại – blamb

Trả lời

5

Sự cố này xảy ra do việc cập nhật doctrine/orm thành phiên bản 2.5 từ 2.4.x. Có rất nhiều BC breaks.

Hạ cấp doctrine/orm thành https://packagist.org/packages/doctrine/orm#v2.4.7 và sự cố sẽ biến mất. Sau khi biết đây là vấn đề của bạn, bạn cần phải viết lại các truy vấn của mình để đáp ứng bất kỳ yêu cầu mới nào. Tôi cũng đã thấy một lưu ý trong đó về vấn đề của MariaDB.

Thực tế, vì tôi chưa giải quyết hoàn toàn bản thân mình, nó có thể dễ dàng như tái tạo các thực thể. Tôi luôn do dự khi tôi làm điều đó ....

0

bởi vì bạn đã thực hiện một var_dump.

var_dump chỉ hiển thị các mục ở trạng thái hiện tại vì bản thân các đối tượng chưa được điền. họ bị kéo vào cuộc gọi đầu tiên của họ nếu bạn lười biếng tải chúng.

+0

tôi không nghĩ như vậy, beacuse một ứng dụng json của nó, nếu tôi chỉ đơn giản là kéo url, tôi nhận được [null, null, null, null], đây là làm thế nào tôi nhận thấy teh lỗi ở nơi đầu tiên. sau đó tôi đặt các công cụ gỡ lỗi trên đó, và nó hiển thị cho tôi cùng .. var_dump sẽ hiển thị kết quả chính xác, tuy nhiên, vì im var bán phá giá kết quả '$ results = $ query-> getArrayResult();' vì vậy im không chắc chắn những gì ý bạn là. 'getResult()' cho kết quả tương tự. vì vậy những gì bạn nhìn thấy trong đoạn mã trong OP, là chính xác whats trở về, dòng đầu tiên là $ query-> getSql(), và dòng thứ 2 là $ kết quả đổ – blamb

+0

tải lười biếng không có gì để làm với "nhận được kết quả ", nhưng" bằng cách sử dụng kết quả ", đối với tôi, gợi ý vẫn hợp lệ mà không có bằng chứng tiêu cực và btw [phương thức thực thi abstractquery] (http://www.doctrine-project.org/api/orm/2.4/source -class-Doctrine.ORM.AbstractQuery.html # 575) lưu trữ các truy vấn, điều tốt nhất bạn có thể làm là xdebug hành vi mã – ROLO

0

Kiểm tra xem bạn có chú thích @ORM \ Id trong thực thể của mình không!

0

Hôm nay tôi phải đối mặt với "vấn đề" này. Trong trường hợp của tôi, tất cả là về giá trị null trong cột được đánh dấu là @id. Tôi se cho bạn xem.

Đây là bảng hoá đơn của:

mysql> select * from payments; 
+----------------------------------+---------------------+-------+---------+ 
| transaction      | date    | total | invoice | 
+----------------------------------+---------------------+-------+---------+ 
| JB2BJ43dqhI7xiVxP1j1ExlIbraplHiS | 2015-04-24 21:23:08 | 320 |  3 | 
| DIavWPjtVf9ZJ0m4GBnP2ZDCBzV4PBmQ | 2015-04-24 21:49:39 | 320 |  4 | 
| XporZAkdIFDbdq9Uzvw1rp2GD4W98esy | 2015-04-24 22:18:10 | 320 |  5 | 
| OFgUCb5kdjftqiNUmU6BCok47EZ6Sw2X | 2015-04-27 01:10:01 | 25 |  10 | 
+----------------------------------+---------------------+-------+---------+ 

Tôi đã thêm một cột mới để đánh dấu là một khóa chính:

mysql>alter table invoices add column `id_payment` int auto_increment; 

mysql> select id_payment, transaction, date, total, invoice from paymen 
s limit 4; 
+------------+----------------------------------+---------------------+-------+--------+ 
| id_payment | transaction      | date    | total | invoice| 
+------------+----------------------------------+---------------------+-------+--------+ 
|  NULL | JB2BJ43dqhI7xiVxP1j1ExlIbraplHiS | 2015-04-24 21:23:08 | 320 |  3| 
|  NULL | DIavWPjtVf9ZJ0m4GBnP2ZDCBzV4PBmQ | 2015-04-24 21:49:39 | 320 |  4| 
|  NULL | XporZAkdIFDbdq9Uzvw1rp2GD4W98esy | 2015-04-24 22:18:10 | 320 |  5| 
|  NULL | OFgUCb5kdjftqiNUmU6BCok47EZ6Sw2X | 2015-04-27 01:10:01 | 25 |  10| 
+------------+----------------------------------+---------------------+-------+--------+ 

Bây giờ, trong mô hình Invoice tôi đặt cột mới như tôi khóa chính:

/** 
* @entity 
* @table(name="invoices") 
*/ 
class Invoice 
{ 
    /** 
    * @id 
    * @column(type="int", name="id_payment") 
    */ 
    protected $id; 

    // ... 

Khi tôi thay đổi bảng, tất cả các giá trị trong id_payment cột là null. Điều này sẽ trở lại giá trị null thậm chí tất cả các lĩnh vực khác chứa thông tin:

$qb = $em->createQueryBuilder(); 
$qb->select(['a']); 
$qb->from(Invoice::class, 'a'); 
$invoices = $qb->getQuery()->getArrayResult(); 
dd($invoices); 

Kết quả:

[ 
    null, 
    null, 
    null, 
    null, 
] 
Các vấn đề liên quan