使用背包包的laravel中桌子之间的关系

时间:2016-08-25 18:44:27

标签: mysql laravel backpack-for-laravel

我正在使用backpack CRUD包在laravel 5.2中创建我的网站项目

我想在两个表之间建立关系。第一个表称为客户,第二个表称为事务。每个客户都有很多交易(1:N关系)。

客户表记录:

ID名称

123456 xyz

交易表记录:

ID CustomerID

101010 123456

我知道我必须在客户模型中指定关系。但是,如何在CRUD中显示关系的结果?

3 个答案:

答案 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在表格视图中显示它,selectselect2字段类型在添加中显示/编辑视图。阅读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总是有帮助的。通过它。