【问题标题】:Laravel 4: How to access data from belongsTo() relationship?Laravel 4:如何从 belongsTo() 关系访问数据?
【发布时间】:2014-08-24 14:20:12
【问题描述】:
// models:
class Hometype extends Eloquent {
    public function development() {
        return $this->belongsTo('Development');
    }
}

class Development extends Eloquent {
    public function hometypes() {
        return $this->hasMany('Hometype', 'dev_id');
    }
}

有了它,我可以做到:

// controller:
$development = Development::where('stuff')->first();
// view:
@foreach ($development->hometypes as $hometype)
    {{ $hometype->stuff }}
@endforeach

真是太可爱了。

但我似乎做不到:

// controller:
$hometype = Hometype::where('stuff')->first();
// view:
{{ $hometype->development->stuff }} // <- fails

如何从 $hometype 中访问父 Development 模型上的字段?

我正在诉诸:

'development' => Development::find($hometype->dev_id),

这看起来很傻。

可能重复:Laravel 4 - Can't retrieve data in a one-to-many relationship,但我不是 camelCasing...

也类似于:Laravel 4 hasOne / belongsTo relationship(这里没有答案)

【问题讨论】:

    标签: php laravel relationships


    【解决方案1】:

    如我所见,可能有两个问题:

    1. Hometype 中的外键错误(如果您使用的列名与“column”_id 不同,则必须指定它)
    2. 您可能正在获取其开发行不存在的 Hometype 记录

    【讨论】:

    • 诅咒自己,就这么简单。原因一。 return $this-&gt;belongsTo('Development', 'dev_id'); 一切都按我的意图进行。没有意识到您需要在 both 模型上指定自定义外键。谢谢!
    【解决方案2】:

    在 hasMany 和 belongsTo 之间访问数据和方法 先获取需要的模型,然后循环遍历

    这些是模型:

    class ExpenseCategory extends Model
      public function expense_transactions()
      {
          return $this->hasMany('App\ExpenseTransaction');
      }
    
    
      class ExpenseTransaction extends Model
          public function expense_category()
          {  
              return $this->belongsTo('App\ExpenseCategory');
          }
    

    上述模型的架构:

    Schema::create('expense_transactions', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('expense_category_id')->nullable();
        $table->unsignedInteger('day_sheet_id')->nullable();
        $table->string('expense_title')->nullable();
        $table->unsignedInteger('amount');
        $table->timestamps();
    
    $table->foreign('expense_category_id')
          ->references('id')->on('expense_categories')
          ->onDelete('cascade');
    
    $table->foreign('day_sheet_id')
          ->references('id')->on('day_sheets')
          ->onDelete('cascade');
    

    类别架构:

    Schema::create('expense_categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();  
        });
    

    仅查找模型中日工作表 ID 的费用交易

    $expenseTransactions = ExpenseTransaction::where('day_sheet_id', $id)->get();
    

    显示他们的类别名称 在刀片中访问: 在foreach循环中

    @foreach($expense_transactions as $expense_transaction)
    {{ $expense_transaction->expense_category->name  }}  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-04
      • 2017-02-14
      • 2015-11-29
      • 2018-03-08
      • 2019-05-26
      • 2020-01-15
      • 2017-08-07
      • 2019-02-15
      相关资源
      最近更新 更多