How to become Rich using Net

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

How to become Rich using Net

Stella-12

How to become Rich using Net
Earning sitting at home is very easy nowadays.When everything is
available online and are so easy to use.You just need a net connection
and spare time to earn handsome money :
http://www.earndollors.blogspot.com


--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups "Cake PHP" group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply | Threaded
Open this post in threaded view
|

Mysteries with findAll ???

Bernard Grosperrin

OK, I don't get it!!!

The SQL code generated looks OK, but I don't get the results...!

I am sure there is (are) better ways, I am still discovering cake (and
PHP, BTW)!

Here is the request generated (got it through debug):

SELECT "Stock"."product_id" AS "Stock__product_id",
"Stock"."location_id" AS "Stock__location_id", "Stock"."on_hand_units"
AS "Stock__on_hand_units", "Stock"."committed_units" AS
"Stock__committed_units", "Stock"."on_order_units" AS
"Stock__on_order_units", "Stock"."on_hand_dollars" AS
"Stock__on_hand_dollars", "Stock"."exch_cost" AS "Stock__exch_cost",
"Stock"."last_exch_cost" AS "Stock__last_exch_cost", "Stock"."created"
AS "Stock__created", "Stock"."modified" AS "Stock__modified",
"Product"."id" AS "Product__id", "Product"."description" AS
"Product__description", "Product"."size_description" AS
"Product__size_description", "Product"."section_size" AS
"Product__section_size", "Product"."aspect_size" AS
"Product__aspect_size", "Product"."tire_rim_size" AS
"Product__tire_rim_size", "Product"."plg_type" AS "Product__plg_type",
"Product"."speed_rating" AS "Product__speed_rating",
"Product"."load_rating" AS "Product__load_rating", "Product"."side_wall"
AS "Product__side_wall", "Product"."created" AS "Product__created",
"Product"."modified" AS "Product__modified", "Location"."id" AS
"Location__id", "Location"."name" AS "Location__name",
"Location"."opensunday" AS "Location__opensunday", "Location"."created"
AS "Location__created", "Location"."modified" AS "Location__modified"
FROM "stocks" AS "Stock" LEFT JOIN "products" AS "Product" ON
"Stock"."product_id" = "Product"."id" LEFT JOIN "locations" AS
"Location" ON "Stock"."location_id" = "Location"."id" WHERE
"Product"."section_size" = 265 AND "Product"."aspect_size" = 70 LIMIT 100

the same (simplified) request in Postgresql:

SELECT * FROM stocks LEFT JOIN products ON stocks.product_id
=products.id LEFT JOIN locations ON stocks.location_id = locations.id
WHERE products.section_size = 265 AND products.aspect_size = 70

give me 58 (expected) rows,  while, if I have one of the values, like
section_size, where there is no match, I get no results with cake
(expected), but I get ALL rows (422) if there is a match!

here is the code in my controller, which, I am sure, will make some
laugh....
Thanks for any help!

     class StocksController extends AppController
   
     {
             var $name = 'Stocks';    
             var $components = array('Filter');  
             var $helpers = array('Html','Javascript','Time','Filter');    
             var $uses = array('Stock', 'Product')    ;

             function index($page = '1', $location = '0')
             {                                        
                     $this->checkSession();
                     uses('sanitize');
                     $cleaner = new Sanitize();
                     $page = $cleaner->paranoid($page);                  
   
                     if(!empty($this->data))                          
               
                     {
                             $temparray = ($this->cleanArray($this ->
data,'Product')) ;
                             $myquery =
$this->buildRequest($temparray['Product']);                      
                             if (count($temparray['Product']) <> 0)
                             {                                        
                 
                                print_r($myquery);      
                                $this->set('Stocks',
$this->Stock->findAll($myquery,"","",100, $page));
                                $this->set('page',$page);    
                               
$this->set('total_stocks',$this->Stock->findCount($myquery));
                             }
                             else
                             {
                                $this->set('Stocks',
$this->Stock->findAll("","","",100, $page));
                                $this->set('page',$page);    
                               
$this->set('total_stocks',$this->Stock->findCount());              
                         
                             }
                             /* clear the search */
                             /*$this->data = array();                */
                           
                     }
                     else
                     {
                             $this->set('Stocks',
$this->Stock->findAll("","","",100, $page));
                             $this->set('page',$page);    
                             
$this->set('total_stocks',$this->Stock->findCount());                
                               
                     }
                                       
             }
           
             function cleanArray($array,$arrayToClean)
             {
                     /* remove empty items in the array, so only fields
with search vales are kept. */
                   foreach ($array[$arrayToClean] as $index => $value)
                   {
                       if (empty($value))
unset($array[$arrayToClean][$index]);
                      }
                   return $array;
            }

            function buildRequest($array)
            {              
                    $tmpstring = '';
                   
                    foreach ($array as $index => $value)
                    {
                           
                            if (empty($tmpstring))
                            {
                               $tmpstring = $tmpstring . '"Product"."' .
$index . '" = ';  
                            }
                            else
                            {
                               $tmpstring = $tmpstring . ' AND
"Product"."' . $index . '" = ';      
                            }

                            if (ctype_digit($value))
                            {
                                    $tmpstring = $tmpstring . $value;
                            }
                            else
                            {
                                    $tmpstring = $tmpstring . '"' .
$value . '"';
                            }
                    }
                    return $tmpstring;
                   
            }
                       
     }


Bernard

--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups "Cake PHP" group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply | Threaded
Open this post in threaded view
|

Re: [professionel] Mysteries with findAll ???

Bernard Grosperrin

As an answer to myself, further tests with postgresql let me see that I
need to replace the first left join by an inner join

> SELECT "Stock"."product_id" AS "Stock__product_id",
> "Stock"."location_id" AS "Stock__location_id", "Stock"."on_hand_units"
> AS "Stock__on_hand_units", "Stock"."committed_units" AS
> "Stock__committed_units", "Stock"."on_order_units" AS
> "Stock__on_order_units", "Stock"."on_hand_dollars" AS
> "Stock__on_hand_dollars", "Stock"."exch_cost" AS "Stock__exch_cost",
> "Stock"."last_exch_cost" AS "Stock__last_exch_cost", "Stock"."created"
> AS "Stock__created", "Stock"."modified" AS "Stock__modified",
> "Product"."id" AS "Product__id", "Product"."description" AS
> "Product__description", "Product"."size_description" AS
> "Product__size_description", "Product"."section_size" AS
> "Product__section_size", "Product"."aspect_size" AS
> "Product__aspect_size", "Product"."tire_rim_size" AS
> "Product__tire_rim_size", "Product"."plg_type" AS "Product__plg_type",
> "Product"."speed_rating" AS "Product__speed_rating",
> "Product"."load_rating" AS "Product__load_rating", "Product"."side_wall"
> AS "Product__side_wall", "Product"."created" AS "Product__created",
> "Product"."modified" AS "Product__modified", "Location"."id" AS
> "Location__id", "Location"."name" AS "Location__name",
> "Location"."opensunday" AS "Location__opensunday", "Location"."created"
> AS "Location__created", "Location"."modified" AS "Location__modified"
> FROM "stocks" AS "Stock" LEFT JOIN "products" AS "Product" ON
> "Stock"."product_id" = "Product"."id" LEFT JOIN "locations" AS
> "Location" ON "Stock"."location_id" = "Location"."id" WHERE
> "Product"."section_size" = 265 AND "Product"."aspect_size" = 70 LIMIT 100
>  
as in

INNER JOIN "products" AS "Product" ON "Stock"."product_id" = "Product"."id"
LEFT JOIN "locations" AS "Location" ON "Stock"."location_id" =
"Location"."id"

but i don't have the slightest idea as what I need to do in cake to get
that changed.

the relevant models are :

class Location extends AppModel
    {
            var $name = 'Location';
            var $hasMany = 'User,Stock,Sale,Salesstat';
    }

Class Product extends AppModel
 {
         var $name = 'Product';
         var $hasMany = 'Stock';
       
 }

class Stock extends AppModel
    {
            var $name = 'Stock';
            var $belongsTo = 'Product,Location';
                   
    }







--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups "Cake PHP" group.
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---