php - 连接mysql中的两个表

标签 php mysql laravel

我的数据库中有两个表 - vnames 和 vtypes
vtypes 有一个 name 字段和一个 id 字段,vnames 有一个 id 字段,name 字段和一个 vtypes_id 字段,它是一个外键连接字段。它与vtypes中的id字段相关联。

我有 Vname 和 Vtype 模型 -

Vname

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Vname extends Model
{
    public function vtype() {
        return $this->belongsTo('App\Vtype');
    }
}

V型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Vtype extends Model
{
    public function vname() {
        return $this->hasMany('App\Vtype');
    }
}

当我删除 vtype 表中的任何列时,我想删除与其关联的所有 vname 列。 我找到了这样的解决方案 -

public function vtypeDestroy($id) {
    $vtype = Vtype::find($id);
    $vtype->vname()->detach();
    $vtype->delete();

    Session::flash('success', 'The vtype was successfully deleted');
    return redirect('/vtypes');
}

但是当我运行这个函数时,我得到了这样的错误 - Call to undefined method Illuminate\Database\Query\Builder::detach()

我该如何解决?

当我想从 vname 获取 vtype 的名称时,我做不到。我试过这样

@foreach ($vnames as $vname)
    {{ $vname->vtype()->name }}
@endforeach

在 View 中

但我遇到了这样的错误 -- Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name

请指导我如何解决我现在面临的这两个问题。

最佳答案

你的关系应该是:

Vname 模型

class Vname extends Model
{
  public function vtype() {
        return $this->belongsTo('App\Vtype', 'vtypes_id', 'id');
  }
}

V型

class Vtype extends Model
{
    public function vname() {
        return $this->hasMany('App\Vname', 'vtypes_id', 'id');
    }
}

然后你可以使用delete方法来删除关系:

$vtype = Vtype::find($id);
$vtype->vname()->delete();
$vtype->delete();

在你看来应该是:

@foreach ($vnames as $vname)
    {{ $vname->vtype->name }}
@endforeach

Docs

关于php - 连接mysql中的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254891/

相关文章:

php - 使用更新查询计算mysql中的排名

javascript - 如何在上传之前获取文件名并将其传递到另一个文本输入字段而不使用 fakepath

c# - LINQ to SQL 多表左外连接

PHP MySQL 将用户表加入多列和多行

mysql - 循环访问模型中的表列值

php - 按 id 选择第三个表

php - 所有查询都是大写的,带有 oracle 驱动程序和 laravel 查询生成器

laravel - 何时在 Laravel 5 auth 特征中设置 redirectPath 属性

Laravel 5.4 调用未定义函数 Session::getMetadataBag()

Laravel - 获取客户端 IP 地址 - 总是得到 127.0.0.1 结果