我正在使用backpack CRUD包在laravel 5.2中创建我的网站项目
我想在两个表之间建立关系。第一个表称为客户,第二个表称为事务。每个客户都有很多交易(1:N关系)。
客户表记录:
ID名称
123456 xyz
交易表记录:
ID CustomerID
101010 123456
我知道我必须在客户模型中指定关系。但是,如何在CRUD中显示关系的结果?
答案 0 :(得分:3)
您应该在交易和客户模型上建立关系,这样您就可以$customer->transactions
和$transaction->customer
:
class Customer extends Model
{
/**
* Get the comments for the blog post.
*/
public function transactions()
{
return $this->hasMany('App\Transactions', 'CustomerID', 'ID');
}
}
和
class Transaction extends Model
{
/**
* Get the comments for the blog post.
*/
public function customer()
{
return $this->belongsTo('App\Customer', 'CustomerID', 'ID');
}
}
花一些时间在Eloquent Relationships Documentation。如果你想成为一名Laravel开发者,了解它们非常重要。
为了在CRUD中显示关系,您可以使用Backpack select column type在表格视图中显示它,select或select2字段类型在添加中显示/编辑视图。阅读CRUD Example Entity以更好地了解其工作原理。
答案 1 :(得分:1)
首先,当您为两个表创建迁移时,包含外键(FK)的表必须具有以下字段:
public function up(){
$table->increments('id');
$table->integer('customerID')->unsigned();
}
之后,您需要将下一个命令调用到控制台
php artisan migrate
接下来是下一个命令:
php arisan backpack:crud customers
php arisan backpack:crud transactions
之后,您需要在模型中定义函数,这些函数返回其他表中的值。客户模型需要具备下一个功能
public function transactions(){
return $this->hasMany('Transaction');
}
交易模型必须具有下一个功能
public function customer() {
return $this->belongsTo('Customer');
}
接下来,您必须在Customer控制器中添加CRUD字段才能显示 选择框中的交易。
$this->crud->addField([
'label' => 'Transactions', // Label for HTML form field
'type' => 'select2', // HTML element which displaying transactions
'name' => 'customerID', // Table column which is FK for Customer table
'entity'=> 'customer', // Function (method) in Customer model which return transactions
'attribute' => 'ID', // Column which user see in select box
'model' => 'Transaction' // Model which contain FK
]);
希望这会有所帮助:)
答案 2 :(得分:0)
在您与事务建立onetomany关系后,您可以获得结果。
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class demo extends Activity {
private final List blockedKeys = new ArrayList(Arrays.asList(KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_POWER));
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
setContentView(R.layout.demo);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(!hasFocus) {
// Close every kind of system dialog
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
Toast.makeText(demo.this, "Your LongPress Power Button", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBackPressed() {
// nothing to do here
// … really
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (blockedKeys.contains(event.getKeyCode())) {
return true;
} else {
return super.dispatchKeyEvent(event);
}
}
Laravel Relationships Documentation总是有帮助的。通过它。