2012-08-29 1 views
0

Я изучаю воспламенитель кода, и в настоящее время я пытаюсь создать корзину покупок, которая работает над несколькими таблицами. Я могу сделать так, чтобы он работал с использованием 1 таблицы, но когда я пытаюсь использовать метод JOIN, он всегда дает «Продукт не существует».Код воспламенитель корзины покупок присоединение и выбор из нескольких таблиц

модель я использую:

class Cart_model extends CI_Model { 
function tvs(){ 
    $query = $this->db->get('tvs'); 
    return $query->result_array(); 
} 
function computers(){ 
    $query = $this->db->get('computers'); 
    return $query->result_array(); 
}  
function laptops(){ 
    $query = $this->db->get('laptops'); 
    return $query->result_array(); 
} 
function validate_update_cart(){ 
    $total = $this->cart->total_items(); 
    $item = $this->input->post('rowid'); 
    $qty = $this->input->post('qty'); 
    for($i=0;$i < count($item);$i++) 
    { 
     $data = array(
      'rowid' => $item[$i], 
      'qty' => $qty[$i] 
     );   
     $this->cart->update($data); 
    } 
} 
function validate_add_cart_item(){ 
    $id = $this->input->post('product_id'); // Assign posted product_id to $id 
    $qty = $this->input->post('quantity'); // Assign posted quantity to $cty 
    $this->db->select('*'); 
    $this->db->from('tvs'); 
    $this->db->join('computers', 'computer.id = tv.id and computer.name = tv.name and computer.price = tv.price'); 
    $this->db->join('laptops', 'laptops.id = tv.id and laptops.name = tv.name and laptops.price = tv.price'); 
    $this->db->where('tvs.id', $id); 
    $query = $this->db->get(); 
    return $query->result(); 
} 
foreach($this->cart->contents() as $item) { 
if($item['id'] == $id) { 
$data = array(
'rowid' => $item['rowid'], 
'qty' => $item['qty'] + $qty 
); 
$this->cart->update($data); 
return TRUE; 
} 
} 
$row = $query->row(); 
$data = array(
'id' => $id, 
'qty' => $qty, 
'price' => $row->price, 
'name' => $row->name 
); 
this->cart->insert($data); 
return TRUE; 
{ 
}else{ 
return FALSE; 
} 
} 
} 

Это элемент списка:

<ul class="products">  
<?php foreach($TV as $p): ?> 
    <li> 
     <h1> 
<a href="<?php echo current_url();?>/ 
<?php echo $p['link']; ?>" /> 
<?php echo $p['name']; ?> 
</a> 
</h1> 
<img src="<?php echo base_url(); ?>assets/image/products/<?php echo $p['image']; ?>" alt="<?php echo $p['name']; ?>" /> 
<h3> 
<?php echo $p['description']; ?> 
</h3> 
<small>&pound;<?php echo $p['price']; ?></small> 
<?php echo form_open('/testcart/home/add_cart_item'); ?> 
<fieldset> 
       <label>Quantity</label> 
       <?php echo form_input('quantity', '1', 'maxlength="2"'); ?> 
       <?php echo form_hidden('product_id', $p['id']); ?> 
       <?php echo form_submit('add', 'Add to Cart'); ?> 
      </fieldset> 
     <?php echo form_close(); ?> 
    </li> 
    <?php endforeach;?> 
</ul>` 

Контроллер:

function add_cart_item(){  
if($this->cart_model->validate_add_cart_item() == TRUE){  
     if($this->input->post('ajax') != '1'){  
      redirect('');  
     }else{  
      echo 'true';  
     } 
    } 
} 

Javascript

$(document).ready(function() { 
var link = baseurl; 


$("ul.products form").submit(function() { 
    // Get the product ID and the quantity 
    var id = $(this).find('input[name=product_id]').val(); 
    var qty = $(this).find('input[name=quantity]').val(); 

    $.post(link + "home/add_cart_item", { product_id: id, quantity: qty, ajax: '1' }, 
     function(data){ 

     if(data == 'true'){ 

      $.get(link + "home/show_cart", function(cart){ 
       $("#cart_content").html(cart); 
      }); 

     }else{ 
      alert("Product does not exist"); 
     } 

    }); 

    return false; 
}); 

$(".empty").live("click", function(){ 
    $.get(link + "home/empty_cart", function(){ 
     $.get(link + "home/show_cart", function(cart){ 
      $("#cart_content").html(cart); 
     }); 
    }); 

    return false; 
}); 

});

Я не слишком уверен, где это происходит неправильно, поскольку я относительно новичок во всем этом, будь то Javascript или PHP.

+0

Вы понимаете этот возврат $ query-> result(); выйдет из вашей модели. Что это за прелюс, который приходит после этого? Вы имели в виду другую функцию? – ekims

+0

Не знаю, что там сделал результат query->. Foreach - это когда вы нажимаете на добавление в корзину во второй раз, когда он будет обновлять количество. – Danny

ответ

0

Это ваш бесплатный метод. Вы делали ошибку, выбирая из табличных телевизоров и используя tv в соединениях

function validate_add_cart_item() 
{ 
    $id = $this->input->post('product_id'); // Assign posted product_id to $id 
    $qty = $this->input->post('quantity'); // Assign posted quantity to $cty 

    $this->db->select('*'); 
    $this->db->from('tvs as tv'); 
    $this->db->join('computers', 'computer.id = tv.id and computer.name = tv.name and computer.price = tv.price'); 
    $this->db->join('laptops', 'laptops.id = tv.id and laptops.name = tv.name and laptops.price = tv.price'); 
    $this->db->where('tv.id', $id); 
    $query = $this->db->get(); 
    return $query->result(); 
} 
+0

Хорошее место! Изменил его, и он все еще дает «Продукт не существует», однако :( – Danny

+0

извините, но есть и другие проблемы. Read codeigniter руководство пользователя также читает Jamie Rumbelows Codeigniter Hand Book это даст вам большую помощь –