# Data Selection

# where()

Sets the condition of choice.

Multiple calls are united all the conditions with the operator 'AND'.

Parameter Type Default Description
$fields string false Left-hand side and operator of an SQL expression e.g 'tbl.field = ' in tbl.field = 5
$where_val mixed false Right-hand side of an SQL expression e.g 5 in tbl.field = 5.
Values will automatically get escaped.
$glue string 'AND' SQL operator binding the WHERE clause expressions.
$index string false

# Option 1:

Accept the input field and value. The field should be appended with an operator. Value will be automatically get escaped.

$last_visit = '2018-04-05';

$xcrud->where('catid =', 5);
$xcrud->where('created >', $last_visit);
// or
$xcrud->where('catid =', 5)->where('created >', $last_visit);

//output
//catid = 5 AND created > '2018-04-05'

# Option 2

Accepts an associated array. The array field should be the table field appended with an SQL operator. Value will be automatically get escaped.

$cond = array('catid =' => 5, 'created >' => $last_visit);
$xcrud->where($cond);

//output
//catid = 5 AND created > '2018-04-05'

NOTE

All the conditions in the array will be merged with the operator 'AND'.

# Option 3

Accepts custom line environment. To avoid conflicts in relationships with other tables, qualify each field i.e tablename.fieldname. You also have to take care of properly escaping values.

$xcrud->where("content.catid = 5 AND content.created > '{$last_visit}'");
// or
$xcrud->where("", "content.catid = 5 AND content.created > '{$last_visit}'"); // 1.5 compat.

//output
//content.catid = 5 AND content.created > '2018-04-05'

# Alternative usage

// using OR 
$xcrud->where('catid =', 5);
$xcrud->where('created >', $last_visit, 'OR'); 
//output
//catid = 5 OR created > '2018-04-05'
 
// using IN 
$xcrud->where('catid', array(5,7,8)); // `catid` IN (5,7,8)

// using NOT IN
$xcrud->where('catid !', array(5,7,8)); // `catid` NOT IN (5,7,8)

# or_where()

The same as where($fields, $where_val, 'OR'). Multiple calls will be bound with the 'OR' operator.

Parameter Type Default Description
$fields string '' Left-hand side and operator of an SQL expression e.g 'tbl.field = ' in tbl.field = 5
$where_val mixed false Right-hand side of an SQL expression e.g 5 in tbl.field = 5.
Values will automatically get escaped.

# no_quotes()

The method allows to cancel the automatic shielding values, so you can use the functions in mysql query. Affects on where expressions and pass_var () method. Takes comma-separated fieldnames or array of fieldnames in first parameter.

Parameter Type Default Description
$fields string ''
$xcrud->no_quotes('created');
$xcrud->pass_var('created','now()');
//or
$xcrud->where('created !=','null');

# relation()

Set a 1-n database relation between the main table and $rel_tbl respectively. Hence the field $rel_tbl.$rel_name:

  • is displayed as dropdown list in the 'create' and 'edit' screens.
  • and replaces the main table's $fields.
Parameter Type Default Description
$fields string '' Main table's relation field. It's value gets replaced by $rel_name.
$rel_tbl string '' Related, target or n-table name. Dropdown options will come from this table.
$rel_field string '' n-table relation field to the main table i.e. main_table.$fields = $rel_tbl.$rel_field
$rel_name mixed '' n-table field that will be displayed in place of main_table.$fields and in the dropdown options.
This can be the field name or an array of field names. These will automatically be concatenated with $rel_concat_separator (defaults to a space).
$rel_where array array() An associated array allowing to specify dropdown options from the n-table, see where().
$order_by string false Order by condition (eg. 'username desc'). Defaults to $rel_name ASC.
$multi boolean false Change dropdown to multiselect. Options will be saved separated by comma.
$rel_concat_separator string ' ' Used to concatenate $rel_name when provided as an array.
$tree array false Array, sets tree rendering of dropdown list.
Options: 1. array('primary_key' => 'some_id_field_name', 'parent_key' => 'some_field_name') - primary and parent key field name, will be created pk tree.
Options: 2. array('left_key' => 'some_field_name', 'level_key' => 'some_field_name') - left key and level field names, will be created nested sets tree.
$depend_field string '' Field from current table, options will be extracted based on parent field value ( like country_id column in cities table).
$depend_on string '' Field, thats will be parent to current dropdown.
$xcrud->table('payments'); //this table

// simple relation
// customerName will be displayed instead of the customerNumber, 
// customerNames will be displayed in a dropdown during create/edit
$xcrud->relation('customerNumber','customers','customerNumber', 
	'customerName');

// $rel_where - limit customers in dropdown
$xcrud->relation('customerNumber','customers','customerNumber', 
	'customerName', array('customerNumber <' => 129));
// or
$xcrud->relation('customerNumber','customers','customerNumber', 
	'customerName', 'customerNumber < 129');

$xcrud->relation('customerNumber','customers','customerNumber', 
	'customerName', "customerNumber in (131,141,171)");
$xcrud->relation('customerNumber','customers','customerNumber', 
	'customerName', "customerName LIKE '%ee%'");

# fk_relation()

Create an n-n database relation. Create, manage and display many-to-many connections. The syntax is similar to relation().

Parameter Type Default Description
$label string '' Displaying field label (must be unique, used as alias)
$fields string '' connection field from current table
$fk_table string '' n-n table.
$in_fk_field string '' n-n table field, connected with main table
$out_fk_field string '' n-n table field, connected with relation table
$rel_tbl string '' relation table
$rel_field string '' connection field from relation table
$rel_name string '' field, that will be displayed as name of dropdown option. This can be array of few fields.
$rel_where string array() allows to specify selection items from the target_table, see where(). Default is null.
$rel_orderby string '' order by condition (eg. 'username desc'). Default is by rel_name.
$rel_concat_separator string ' ' take effect only when rel_name is array. Default is ' '.
$before string '' if selected, field will be inserted before this field (by default - in the end)
$add_data string array() additional inserting data

# Structure of n-n connection

table
|- field  --|
            |
            |    fk_table
            |--  |- in_fk_field
                 |- out_fk_field  --|
                                    |
                                    |    rel_table
                                    |--  |- rel_field

# nested_table()

This allows you to display drill down tables off the main table. The nested table(s) are displayed one after the other after the main table in the view and edit screens.

Parameter Type Default Description
$instance_name string '' Assign an identifier to the xCRUD instance being created.
$field string '' The main table field related to the pivot table's $tbl_field.
$inner_tbl string '' The nested/pivot table.
$tbl_field string '' The nested/pivot table field related to $field in the main table.

TIP

The code samples are using the xCRUD demo database, included with your purchase.

$xcrud->table('orders'); // main table
$xcrud->nested_table('products_list','orderNumber','orderdetails', // nested table
	'orderNumber'); 

Each nested_table() call requires a unique $instance_name, as it creates a unique xCRUD instance. This may be assigned to a variable or invoked via get_instance()

$xcrud->table('orders'); // main table
$products_list = $xcrud->nested_table('products_list','orderNumber','orderdetails', 
	'orderNumber'); 

//OR
$xcrud->table('orders'); // main table
$xcrud->nested_table('products_list','orderNumber','orderdetails','orderNumber');
// nested table instance access
$products_list = $xcrud = Xcrud::get_instance('products_list'); 

The nested tables will display the create, view, edit and delete action buttons by default. You can set options for nested tables as well as you do for the main table.

$xcrud->table('orders');
$products_list = $xcrud->nested_table('products_list','orderNumber','orderdetails',
	'orderNumber'); // nested table
$products_list->unset_add(); // nested table instance access

Calling nested_table() on a previous nested_table() call, makes the previous nested_table() call's $nested_table the main table. Below is a rather ridiculous, inverse pivot demonstrating this.

$xcrud->table('orders'); //main table

// show customers of  this order
$order_customer = $xcrud->nested_table('order_customer','customerNumber','customers',
	'customerNumber'); 
$order_customer->columns('customerName');

// main table for this nesting/pivot is customers
// show all other orders by the customer
$customers_orders_fk = $order_customer->nested_table('customers_orders_fk',
	'customerNumber','customers_orders_fk','customer_id'); 
$customers_orders_fk->columns('order_id');

// main table for this nesting/pivot is customers_orders_fk
// and now show the other orders' detail
$customers_orders_fk->nested_table('customers_other_orders',
	'order_id','orders','orderNumber'); 

# search_pattern()

Defines the search pattern for list view search. Method overrides the parameter $search_pattern from the xcrud_config.php file.

Parameter Type Default Description
$left string '%' Appended to the left of the search term.
$right string '%' Appended to the right of the search term.

# Table Joining

# join()

Parameter Type Default Description
$fields string '' Main table field to join on. Can be supplied as a fully qualified field name e.g users.age.
$join_tbl string '' Table to join to.
$join_field string '' Field in $join_tbl to join to the main table $fields. Can be supplied as a fully qualified field name e.g users.age.
$alias mixed false Alias for the table to join to. You may reference the table using it's full name by default.
$not_insert mixed false Disable create and delete actions on joined table(s). These actions are still possible for the main table.
NOT to be confused with unset_add() OR unset_remove(). It does NOT disable the create and delete action buttons.
$xcrud->table('users');

// join users and profiles on users.id = profiles.user_id
$xcrud->join('id','profiles','user_id'); 
 
// now join 'profiles' and 'tokens' tables
$xcrud->join('profiles.token_id','tokens','id'); // on profile.token_id = tokens.id
 
// simple actions with fields: default and joined
$xcrud->column('username','email','profiles.city','tokens.created');

Multiple joins on the same table and disabling create and delete operations on joined table.

$xcrud->table('orderdetails'); 
// join products table and disable create and deletion from products
$xcrud->join('productCode', 'products', 'productCode', FALSE, TRUE);

$xcrud->table('orderdetails'); 
// join products table
$xcrud->join('productCode', 'products', 'productCode', FALSE, TRUE);
// join products table again with an alias
// NOTE: create and deletion from products 
// IS POSSIBLE as $not_insert == FALSE
$xcrud->join('productCode', 'products', 'productCode', 'p');
// use fully qualified names to fetch columns
$xcrud->columns('orderdetails.orderNumber, products.productCode, 
orderdetails.orderLineNumber, products.productScale');

INFO

join() uses INNER JOIN, that is, 1-1 row relation; each row in the first table is joined to the equivalent row in the second table based on the unique join condition.

# Custom SQL

# query()

This method allow you to display read-only results table of a regular SQL query.

Parameter Type Default Description
$query string '' SQL query.
$xcrud = Xcrud::get_instance();
$xcrud->query('SELECT * FROM users WHERE age > 25');
echo $xcrud->render();
Last Updated: 11/1/2021, 10:10:17 PM