Вопрос:
Я предполагаю, что :parent_id оценивает число. Но как именно эта часть кода работает? Когда я должен использовать этот синтаксис (:name)?
$data = Location::model()->findAll(‘parent_id=:parent_id’,array( ‘:parent_id’ => (int) $_POST[‘Current-Controller’][‘country_id’] )); Лучший ответ:
Двоеточие не имеет особого значения. Шаблон :parent_id в целом работает, но это только потому, что вы решили использовать его как имя переменной в WHERE (parent_id=:parent_id).
Вы могли бы так же хорошо выбрать
$data=Location::model()->findAll(‘parent_id=the_quick_brown_fox’, array(‘the_quick_brown_fox’=>(int) $_POST[‘Current-Controller’][‘country_id’]));
На практике двоеточие используется, потому что существует риск того, что имя, которое вы выберете для переменной, также будет присутствовать как законная часть условия, и в этом случае все экземпляры его будут заменены значением, и результаты будут неожиданными.
Например, это:
$data=Location::model()->findAll(‘parent_id=parent_id’, array(‘parent_id’=> 1 /*anything, really*/));
приведет к условию 1=1, которое будет соответствовать всем записям.