2015-03-13 6 views
1

Im пытается найти значение внутри объекта, но я не могу получить то, что делает isset. Возможно, я использую это неправильно. У меня есть два объекта и то, что я пытаюсь сделать, это удалить строку, которая не находится во втором объекте. Вот объект 1:Найти значение внутри объекта CakePHP

Array ( 
    [idCategory1] => 1 
    [idCategory2] => 2 
    [idCategory4] => 4 
) 

А вот объект 2:

Array ( 
    [0] => Array ( 
     [CategoriesProvider] => Array ( 
      [id] => 28 
      [provider_id] => 2 
      [category_id] => 1 
      [created] => 2015-03-13 20:25:17 
      [modified] => 2015-03-13 20:25:17 
     ) 
    ) 
    [1] => Array ( 
     [CategoriesProvider] => Array ( 
      [id] => 29 
      [provider_id] => 2 
      [category_id] => 2 
      [created] => 2015-03-13 20:25:17 
      [modified] => 2015-03-13 20:25:17 
     ) 
    ) 
    [2] => Array ( 
     [CategoriesProvider] => Array ( 
      [id] => 30 
      [provider_id] => 2 
      [category_id] => 4 
      [created] => 2015-03-13 20:25:17 
      [modified] => 2015-03-13 20:25:17 
     ) 
    ) 
) 

Вот мой код, чтобы удалить строку объекта 2, который не находится в объекте 1.

foreach ($CategoriesOfProvider as $key) { 
    if(isset($CategoriesProvider['CategoriesProvider']->$key['CategoriesProvider']['category_id'])) { 

    } else { 
     $this->User->Provider->CategoriesProvider->id = $key['CategoriesProvider']['id']; 
     //$this->request->allowMethod('post', 'delete'); 
     if ($this->User->Provider->CategoriesProvider->delete()) { 

     } else { 
      $this->Session->setFlash(
       '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> No se pudo borrar la relacion producto - categoría.', 
       'default', 
       array('class' => 'alert alert-danger alert-dismissible', 'type' => 'alert') 
      ); 
     } 
    } 
} 

$CategoriesOfProvider - объект 2 и $CategoriesProvider - это объект 1. Итак, я пытаюсь использовать isset, чтобы определить, находится ли идентификатор в объекте 2 в значении объекта 1. Я думаю, что Im использует isset неправильно. Или есть другой способ? Я думал, что, возможно, запустите его против каждого из значений объекта 1. Будет ли это работать лучше?

Заранее за вашу помощь.

ответ

0

Хорошо, я узнал, как это сделать. Я прекратил использовать isset и вместо этого использовал другой foreach и прошел через все значения в объекте 1. Если он не был найден, я удалил дополнительную категорию. Вот код.

$this->User->Provider->CategoriesProvider->recursive = -1; 
$CategoriesOfProvider = $this->User->Provider->CategoriesProvider->find('all', array('conditions'=> array('CategoriesProvider.provider_id' => $provider_id))); 

//echo print_r($CategoriesProvider); 
//return print_r($CategoriesOfProvider); 

foreach ($CategoriesOfProvider as $key) { 
    $found = false; 
    //if(isset($CategoriesProvider['CategoriesProvider']->$key['CategoriesProvider']['category_id'])) { 
    foreach ($CategoriesProvider as $key1 => $value) { 
     if($key['CategoriesProvider']['category_id'] == $value) { 
      $found = true; 
     } 
    } 

    if($found) { 

    } else { 
     $this->User->Provider->CategoriesProvider->id = $key['CategoriesProvider']['id']; 
     //$this->request->allowMethod('post', 'delete'); 
     if ($this->User->Provider->CategoriesProvider->delete()) { 

     } else { 
      $this->Session->setFlash(
       '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> No se pudo borrar la relacion producto - categoría.', 
       'default', 
       array('class' => 'alert alert-danger alert-dismissible', 'type' => 'alert') 
      ); 
     } 
    } 

} 

Я надеюсь, что это поможет кому-то: P

Смежные вопросы