Использование read () в cakephp для получения строки с массивом данных - PullRequest
3 голосов
/ 30 ноября 2011

Я хочу знать, возможно ли извлечь строку из базы данных, используя что-то похожее на следующее:

    if (!empty($this->params['form'])) {
        $place = array();
        $place['city'] = $this->params['form']['city'];
        $place['area'] = $this->params['form']['state'];
        $place['country'] = $this->params['form']['country'];
        $place['iso'] = $this->params['form']['iso'];

        $this->Place->set($place);
        $place_found = $this->Place->read();
    }

Есть ли какой-нибудь способ, которым я могу предварительно установить данные в модели Place, используя массива затем используйте место чтения.Я ищу что-то простое, как обычно:

$this->Place->id = 7;
$place_found = $this->Place->Read();

Я также пытался сделать это:

$this->Place->city = blah;
$this->Place->area = foo; etc....

$place_found = $this->Place->read();

Однако это также не работает.

Ответы [ 4 ]

4 голосов
/ 30 ноября 2011

Разве вы никогда не использовали find() ?! read() извлекает только строку с переданным идентификатором.

$place_found = $this->Place->find('first', array(
    'conditions' => array(
          'Place.city' => $city,
          'Place.area' => $area
          // etc
     )
));

Если вам нужно построить условия вручную, вы можете создать массив условий для передачи следующим образом:

$placeConditions = array();
$placeConditions['city'] = $city;
if($area) {
    $placeConditions['area'] = $area;
}

$places = $this->Place->find('first', array('conditions' => $placeConditions));

Я предлагаю вам прочитать страницу, на которую я ссылался, вскоре вы обнаружите, что нет причины использовать read() метод.

1 голос
/ 30 ноября 2011

В модели вы можете сделать:

$this->id = 3; //place id
$this->Place->read();

Надеюсь, это поможет

0 голосов
/ 30 ноября 2011

Вам придется использовать «find ()», а не «read ()», но - это почти так же просто, как ваш пример кода, и должно работать. (также, я считаю, есть ярлык для array_push (), но - мне нравится использовать это для удобства чтения - личные предпочтения):

if (!empty($this->params['form'])) {
    $conditions = array();
    array_push($conditions, array('Place.city' => $this->params['form']['city']);
    array_push($conditions, array('Place.state' => $this->params['form']['state']);
    array_push($conditions, array('Place.country' => $this->params['form']['country']);
    array_push($conditions, array('Place.iso' => $this->params['form']['iso']);

    $this->Place->set($place);
    $place_found = $this->Place->find('all', array('conditions'=>$conditions));
}
0 голосов
/ 30 ноября 2011

Я думаю, что этот подход - то, что вы ищете (с вашим кодом):

if (!empty($this->params['form'])) {
    $place = array();
    $place['city'] = $this->params['form']['city'];
    $place['area'] = $this->params['form']['state'];
    $place['country'] = $this->params['form']['country'];
    $place['iso'] = $this->params['form']['iso'];

    //$this->Place->set($place); //don't need it here I think
    $place_found = $this->Place->find('all',array('conditions'=>$place));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...